21

私の無知を許してください、しかし、PostgreSQLのテーブルのメタデータをそのテーブルのフィールドとして指定したくない方法があるかどうか疑問に思っています。たとえば、そのテーブルの説明フィールド、作成時間などを追加したい場合...

追加のテーブルを使用してこれを行うことができることはわかっていますが、正直に言うと、これを行う必要はありません。公式の PostgreSQL ドキュメントを掘り下げましたが、information_schema.tables を調べる以外に何もありません。ここでは、何も変更することは許可されていないと思います。

手がかりはありますか?それ以外の場合は、これを処理するためにさらにいくつかのテーブルを作成する必要があると思います。

ありがとう!

4

1 に答える 1

32

コメント欄があります:

COMMENT ON TABLE my_table IS 'Yup, it's a table';

現在のバージョンでは、コメント フィールドは単一のテキスト文字列に制限されています。複合タイプまたはレコードを許可することについての議論がありましたが、実行可能な設計についての合意はありません。

必要に応じて、JSON をコメントに挿入できます。などの出力のDescription列として表示されるため、少し汚れていますが、機能します。\d+psql

craig=> COMMENT ON TABLE test IS 'Some table';
COMMENT
craig=> \d+
                         List of relations
 Schema |         Name         |   Type   | Owner |    Size    | Description 
--------+----------------------+----------+-------+------------+-------------
 public | test                 | table    | craig | 8192 bytes | Some table

次のコマンドを使用して、SQL からコメントを取得できます。

SELECT pg_catalog.obj_description('test'::regclass, 'pg_class');

コメントは、列、データ型、関数などの他のオブジェクトにも追加できます。

それがあなたのニーズに合わない場合は、メタデータ用のサイドテーブルにかなりこだわっています。

人々はテーブルの作成時間などのメタデータを定期的に要求しますが、実装のための実行可能な計画と、それを最後まで実行するための時間と熱意を持ってステップアップする人はほとんどいません。いずれにせよ、最も一般的な要求は「最終更新時刻」です。これは、パフォーマンスの観点から見て非常に恐ろしいものであり、複数バージョンの同時実行制御やトランザクション分離ルールなどに直面して正しく処理するのは困難です。

于 2013-07-30T12:44:49.047 に答える