def primary_key_names(table)
row = self.select_one("SELECT relname\nFROM pg_class\nWHERE relname = '\#{table}' and relnamespace IN\n(SELECT oid FROM pg_namespace WHERE nspname in (\#{schemas}))\n")
raise "table '#{table}' does not exist" if row.nil?
row = self.select_one("SELECT cons.conkey\nFROM pg_class rel\nJOIN pg_constraint cons ON (rel.oid = cons.conrelid)\nWHERE cons.contype = 'p' AND rel.relname = '\#{table}' AND rel.relnamespace IN\n(SELECT oid FROM pg_namespace WHERE nspname in (\#{schemas}))\n")
return [] if row.nil?
column_parray = row['conkey']
column_ids = column_parray.sub(/^\{(.*)\}$/,'\1').split(',').map {|a| a.to_i}
columns = {}
rows = self.select_all("SELECT attnum, attname\nFROM pg_class rel\nJOIN pg_constraint cons ON (rel.oid = cons.conrelid)\nJOIN pg_attribute attr ON (rel.oid = attr.attrelid and attr.attnum = any (cons.conkey))\nWHERE cons.contype = 'p' AND rel.relname = '\#{table}' AND rel.relnamespace IN\n(SELECT oid FROM pg_namespace WHERE nspname in (\#{schemas}))\n")
sorted_columns = []
if not rows.nil?
rows.each() {|r| columns[r['attnum'].to_i] = r['attname']}
sorted_columns = column_ids.map {|column_id| columns[column_id]}
end
sorted_columns
end