以下は、テーブルがPostgreSQLデータベースに存在するかどうかを確認する5つの方法です。
pg_tables
表示
pg_tables
ビューには、データベース内の各テーブルに関する情報が含まれています。
これを使用して、特定のテーブルが現在のデータベースに存在するかどうかを確認できます。
SELECT EXISTS (
SELECT FROM
pg_tables
WHERE
schemaname = 'public' AND
tablename = 'actor'
);
結果:
True
この場合、True
を取得します 、これはテーブルが存在することを意味します(そして私はそれにアクセスできます)。
構成によっては、t
を取得する場合があります / f
True
の代わりに /False
。
information_schema.tables
表示
information_schema.tables
ビューには、現在のユーザーがアクセスできる現在のデータベースで定義されているすべてのテーブルとビューが含まれます。
これを使用して、特定のテーブルが存在するかどうか、およびそのテーブルにアクセスできるかどうかを確認できます。
SELECT EXISTS (
SELECT FROM
information_schema.tables
WHERE
table_schema LIKE 'public' AND
table_type LIKE 'BASE TABLE' AND
table_name = 'actor'
);
結果:
True
それを行う別の方法は、カウントを取得することです:
SELECT
COUNT(table_name)
FROM
information_schema.tables
WHERE
table_schema LIKE 'public' AND
table_type LIKE 'BASE TABLE' AND
table_name = 'actor';
結果:
1
table_type
次のいずれかになります:
BASE TABLE | 永続ベーステーブル(通常のテーブル) |
VIEW | 表示 |
FOREIGN | 外部テーブル |
LOCAL TEMPORARY | 一時テーブル |
table_type
は省略できます 名前がすべてのタイプに存在するかどうかを確認する場合は、フィルターから。
システムカタログ
システムカタログは、RDBMSがテーブルや列に関する情報、内部の簿記情報などのスキーマメタデータを格納する場所です。
Postgresでは、システムカタログは通常のテーブルです。
それらのうちの2つを使用して、特定のテーブルが存在するかどうかを確認できます。
SELECT EXISTS (
SELECT FROM
pg_catalog.pg_class c
JOIN
pg_catalog.pg_namespace n ON
n.oid = c.relnamespace
WHERE
n.nspname = 'public' AND
c.relname = 'actor' AND
c.relkind = 'r'
);
結果:
True
relkind
r
の 通常のテーブル用です 。
relkind
を削除できます テーブルに付けたい名前がオブジェクトにすでにあるかどうかを確認したいだけの場合は、完全にフィルタリングします。
または、他のタイプでフィルタリングすることもできます。
オプションは次のとおりです。
r | 通常のテーブル |
i | インデックス |
S | シーケンス |
t | TOASTテーブル |
v | 表示 |
m | |
c | |
f | |
p | |
I | |
to_regclass()
機能
to_regclass()
関数は、テキスト関係名をそのOIDに変換します。名前が存在する場合は、OIDが返されます。
例:
SELECT to_regclass('public.actor');
結果:
actor
テーブルが存在しない場合は、NULLが返されます。
regclass
にキャストします
テーブル名をキャストしてregclass
と入力することもできます :
SELECT 'public.actor'::regclass
結果:
actor
ただし、テーブルが存在しない場合はエラーが発生します。
テーブルを作成する前に、テーブルがすでに存在するかどうかを確認してください
テーブルが存在しない場合にテーブルを作成する必要がある場合は、IF NOT EXISTS
を使用できます。 CREATE TABLE
の句 声明。テーブルが存在しない場合は作成されます。すでに存在する場合、作成されません。
例については、PostgreSQLに存在しない場合にのみテーブルを作成するを参照してください。