我是PostgreSQL的新手,我想知道是否有一个表与Oracle的user_cons_column s表匹配,它提供了一个类似于user_cons_columns.position的列位置列。实际上,我正在尝试将以下oracle代码转换为PostgreSQL。它按照PK定义的顺序获得PK列:
Oracle代码(原件):

select a.table_name tab_name,
       a.colum_name col_name,
       a.position   col_order
from user_cons_columns a,
     user_constraints b
where a.table_name = b.table_name
and   a.constraint_name = b.constraint_name
and   b.constraint_type = 'P'
and   a.table_name = 'some_table_name';

PostgreSQL代码(Oracle等效):
/* Below is my attempt at the PostgreSQL conversion */
select isc.table_name       tab_name,
       isc.column_name      col_name,
       isc.ordinal_position col_order
from pg_attribute as pga
inner join pg_class as pgc on pga.attrelid = pgc.oid
inner join pg_namespace as pgn on pgn.oid  = pgc.relnamespace
inner join information_schema.columns as isc on isc.column_name = pga.attname
      and isc.table_name = pgc.relname
where isc.table_name = 'sometablename';

在我的PostgreSQL转换尝试中,我丢失了约束与其位置之间的关系,但使用了列位置。这是不一样的。有办法做前者吗?提前谢谢!

最佳答案

约束的列号及其顺序存储在pg_constraint.conkey中;对于外键,目标列的相应编号存储在pg_constraint.confkey中。
表列的描述在pg_attribute中;列号存储在attnum中。

07-26 01:53