Commit 71917b73 authored by Stan Hu's avatar Stan Hu

Silence unknown PostgreSQL OIDs warnings

When Rails scans a PostgreSQL table, it may come across column types it
does not recognize and log a warning the first time. As discussed in
https://github.com/rails/rails/issues/40687#issuecomment-733989424,
Rails only registers types available to users
(https://www.postgresql.org/docs/13/datatype.html).

We can silence these warnings by registering the OIDs in question
manually.

Relates to https://gitlab.com/gitlab-org/gitlab/-/issues/24043

Changelog: fixed
parent f62b65ca
# frozen_string_literal: true
# As discussed in https://github.com/rails/rails/issues/40687, this
# patch registers a few types to silence warnings when Rails comes
# across some PostgreSQL types it does not recognize.
module PostgreSQLAdapterCustomTypes
def initialize_type_map(m = type_map) # rubocop:disable Naming/MethodParameterName
m.register_type('xid', ActiveRecord::Type::Integer.new(limit: 8))
m.register_type('pg_node_tree', ActiveRecord::Type::String.new)
m.register_type('_aclitem', ActiveRecord::Type::String.new)
m.register_type('pg_lsn', ActiveRecord::Type::String.new)
super
end
end
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.prepend(PostgreSQLAdapterCustomTypes)
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'PostgreSQL registered types' do
subject(:types) { ApplicationRecord.connection.send(:type_map).keys }
# These can be obtained via SELECT oid, typname from pg_type
it 'includes custom and standard OIDs' do
expect(types).to include(28, 194, 1034, 3220, 23, 20)
end
it 'includes custom and standard types' do
expect(types).to include('xid', 'pg_node_tree', '_aclitem', 'pg_lsn', 'int4', 'int8')
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment