# File lib/rubyrep/connection_extenders/postgresql_extender.rb, line 121
      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']
        
        # Change a Postgres Array of attribute numbers
        # (returned in String form, e. g.: "{1,2}") into an array of Integers
        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