0

Postgresql では、次のようなクエリを使用して、テーブルの制約に関する情報を取得できます。

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

これを行うと、NOT NULL 制約を持つ列は次のように表示されます。

2200_77911989_1_not_null

not_null 部分は明らかに NOT NULL 制約を示しています。最後の数字は、列の序数の位置のようです。しかし、最初の 2 つの数字が何であるかを確認できませんでした。私の推測では、それらはおそらくスキーマとテーブルへの参照ですが、何らかの方法で私に伝えるものは何も見つかりません. これに関する Postgres マニュアル エントリは、この点ではあまり役に立ちません。

では、最初の 2 つの数字は何ですか? これらの数値を適切な情報に関連付けるにはどうすればよいですか?

4

1 に答える 1

1

Postgres は、テーブル、型、列、制約などに関する情報をpg_catalogスキーマに保存します。

トップレベルはnamespace. 上記の例では、2200 は名前空間を指します。これは、次を評価することで確認できます。 select oid,* from pg_catalog.pg_namespace where oid=2200;

上記の例の 2 番目の数字 (77911989) は、テーブルの oid (オブジェクト ID) を指します。関連情報は次の方法で表示できます。 select oid,* from pg_catalog.pg_class where oid=77911989;

3 番目の数字 (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 に答える