我是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
中。