0

在 Postgresql 中,您可以使用以下查询来获取有关表上的约束的信息:

SELECT * FROM information_schema.table_constraints WHERE table_name='table_name';

当我这样做时,具有 NOT NULL 约束的列将显示如下:

2200_77911989_1_not_null

not_null 部分显然显示了一个 NOT NULL 约束。最后一个数字似乎是列的序数位置。但是前两个数字我无法验证它们是什么。我的猜测是它们可能是对架构和表的引用,但我找不到任何可以告诉我的东西。在这方面,Postgres 手册条目并不是很有用。

那么前两个数字是什么?如何将这些数字与相关信息联系起来?

4

1 回答 1

1

Postgres 将有关表、类型、列、约束等的信息存储在pg_catalog模式中。

顶层是namespace. 在上面的示例中, 2200 指的是命名空间。您可以通过评估看到这一点: select oid,* from pg_catalog.pg_namespace where oid=2200;

上面示例中的第二个数字(77911989)是指表的 oid(对象 ID)。您可以通过以下方式查看相关信息: select oid,* from pg_catalog.pg_class where oid=77911989;

第三个数字 (1) 是指表中的列号。您可以使用以下命令查看相关信息: select * from pg_catalog.pg_attribute where attrelid=77911989 and attnum=1;

许多返回值(如)是架构atttypmod中其他表(如pg_type)的 OID。pg_catalog

于 2014-11-25T02:21:28.813 回答