22

私は最近、PostgreSQL のあらゆる種類のオブジェクトにコメントを付けることができることを発見しました。特に、データベースのコメントをいじることに興味があります。たとえば、データベースのコメントを設定するには:

COMMENT ON DATABASE mydatabase IS 'DB Comment';

しかし、のコメントを得るために、反対のステートメントは何mydatabaseですか?

コマンド ラインから、psqlコマンドの結果としてコメントとその他の情報を確認できます\l+。私の目標を達成するために awk の助けを借りて使用できます。しかし、可能であれば、SQL ステートメントを使用したいと思います。

4

5 に答える 5

42

まず、テーブル コメントのクエリは、適切なオブジェクト識別子の型へのキャストを使用して簡略化できます。

SELECT description
FROM   pg_description
WHERE  objoid = 'myschema.mytbl'::regclass;

スキーマ部分はオプションです。これを省略すると、 currentsearch_pathによって という名前のテーブルの可視性が決定されmytblます。

さらに良いことに、PostgreSQL には、これらのクエリを簡素化および正規化するための専用関数があります。マニュアル:

obj_description(object_oid, ... データベース オブジェクトのコメントを取得するcatalog_name)

shobj_description(object_oid, ... 共有データベース オブジェクトのコメントを取得するcatalog_name)

表の説明:

SELECT obj_description('myschema.mytbl'::regclass, 'pg_class');

データベースの説明:

SELECT pg_catalog.shobj_description(d.oid, 'pg_database') AS "Description"
FROM   pg_catalog.pg_database d
WHERE  datname = 'mydb';

それをどうやって知るのですか?

まあ、優れたマニュアルを読むことは啓発的です。:)
しかし、この場合、より直接的なルートがあります: ほとんどのpsqlメタ コマンドはプレーンな SQL で実装されています。でセッションを開始して、カーテンの背後にある魔法をご覧ください。マニュアル:psql -E

-E
--echo-hidden

\dおよびその他のバックスラッシュ コマンドによって生成された実際のクエリをエコーし​​ます。これを使用して、psql の内部操作を調べることができます。これは、変数ECHO_HIDDENをに設定することと同じonです。

于 2012-07-15T23:25:39.700 に答える
15

データベースに関するコメントを取得するには、次のクエリを使用します。

select description from pg_shdescription
join pg_database on objoid = pg_database.oid
where datname = '<database name>'

このクエリは、指定されたテーブル名のテーブル コメントを取得します。

select description from pg_description
join pg_class on pg_description.objoid = pg_class.oid
where relname = '<your table name>'

異なるスキーマで同じテーブル名を使用する場合は、少し変更する必要があります。

select description from pg_description
join pg_class on pg_description.objoid = pg_class.oid
join pg_namespace on pg_class.relnamespace = pg_namespace.oid
where relname = '<table name>' and nspname='<schema name>'
于 2012-07-15T18:08:06.590 に答える
1

テーブルの場合は、試してください

\dd TABLENAME

これは、テーブルに追加したコメントを示しています

于 2016-06-01T16:58:04.997 に答える
0

このクエリは、すべてのテーブルのテーブル コメントのみを取得します

SELECT RelName,Description 
FROM pg_Description
JOIN pg_Class 
ON pg_Description.ObjOID = pg_Class.OID
WHERE ObjSubID = 0
于 2014-06-12T07:21:42.403 に答える