テーブルOIDを取得するには、オブジェクト識別子タイプregclass
にキャストします (同じDBに接続している間):
SELECT 'mytbl'::regclass::oid;
これにより、search_path
に沿って指定された名前の最初のテーブル(またはビューなど)が検索されます。 または、見つからない場合は例外を発生させます。
テーブル名をスキーマ修飾して、検索パスへの依存関係を削除します。
SELECT 'myschema.mytbl'::regclass::oid;
Postgresでは9.4 またはそれ以降、to_regclass('myschema.mytbl')
を使用することもできます 、テーブルが見つからない場合でも例外は発生しません:
- 特定のスキーマにテーブルが存在するかどうかを確認する方法
次に、カタログテーブルpg_attribute
をクエリするだけです。 列の存在について:
SELECT TRUE AS col_exists
FROM pg_attribute
WHERE attrelid = 'myschema.mytbl'::regclass
AND attname = 'mycol'
AND NOT attisdropped -- no dropped (dead) columns
-- AND attnum > 0 -- no system columns (you may or may not want this)