2013-07-30 13 views
9

私の無知を許していますが、PostgreSQLのテーブルのメタデータを指定して、そのテーブルのフィールドとしたくない場合はどうかと思います。たとえば、そのテーブルのDescriptionフィールドを追加する場合、作成時間など...postgresqlにテーブルのメタデータを追加することは可能ですか?

私は余分なテーブルを使ってこれを行うことができますが、私はこれをやっていない方が正直であることを望みます。私は公式のPostgreSQLのドキュメントを掘り下げましたが、information_schema.tablesを調べる以外に何もありません。どこでも何かを変更することはできません。

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

ありがとうございます!

答えて

13

コメント欄があります:

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

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

必要に応じてコメントにJSONを押し込むことができます。それはの\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'); 

コメントは、他のオブジェクトに追加することができ、その他の列、データ型、関数、などの

それはdoesnの場合は」あなたのニーズに合っていると、メタデータのためのサイドテーブルがかなり残っています。

人は定期的に作成時間などのテーブルメタデータを要求しますが、誰も実行のための実行可能な計画と、それをフィニッシュまで運ぶための時間と熱意に踏み出す傾向はありません。いずれの場合でも、最も一般的な要求は、パフォーマンスの観点からはかなり恐ろしく、マルチバージョンの並行性制御、トランザクション分離ルールなどの面では直面するのが難しい「最終変更時刻」です。

+0

Wow、非常に詳細な応答に感謝します。私は、COMMENTが説明の目的のために働くと思います。私はそこにタイムスタンプを挿入して、それを "テーブル作成時間"に使うこともできると思います。私は最後の変更されたものの全体的な考えを得ることはできません...私はそのフィールドに基づいて作成/変更と順序付けのタイムスタンプを持つ各行のテーブルにフィールドを持つことは十分だと思う...明らかに必要でないなら効率的です...ありがとうクレイグ!いい答え! – AlejandroVK

+0

@AlejandroVK「最後に変更されました」という問題があります。通常、テーブルヒープをスキャンすることなく、どのテーブルに最近の変更があるかを確認したい人です。私は実際にそれを得ていないが、それは共通の要求であるようだ。 –

+0

私の頭に浮かぶもう1つのユースケースは、アプリケーションコードに関連する状態をテーブルに格納させることです。例えば。私はイベントを格納するテーブルを使用しています。アプリケーションはこのイベントストリームを望みどおりに処理するので、最後に処理されたイベントのID /タイムスタンプを直接テーブルに格納できればいいでしょう。 – sthzg

関連する問題