pk_and_sequence_for(table)
public
Returns a table’s primary key and belonging sequence.
Show source
def pk_and_sequence_for(table)
result = exec_query( SELECT attr.attname, ns.nspname, seq.relname FROM pg_class seq INNER JOIN pg_depend dep ON seq.oid = dep.objid INNER JOIN pg_attribute attr ON attr.attrelid = dep.refobjid AND attr.attnum = dep.refobjsubid INNER JOIN pg_constraint cons ON attr.attrelid = cons.conrelid AND attr.attnum = cons.conkey[1] INNER JOIN pg_namespace ns ON seq.relnamespace = ns.oid WHERE seq.relkind = 'S' AND cons.contype = 'p' AND dep.refobjid = '#{quote_table_name(table)}'::regclass, 'SCHEMA').rows.first
if result.second == 'public' then
sequence = result.last
else
sequence = result.second+'.'+result.last
end
[result.first, sequence]
rescue
nil
end