1. ホーム
  2. postgresql

[解決済み] PostgreSQLでカラムが存在しない場合、どのように追加しますか?

2022-04-16 22:56:39

質問

質問は簡単です。カラムの追加方法 x テーブルへ y ただし、以下の場合に限る。 x カラムが存在しない?唯一の解決策を見つけた これ カラムが存在するかどうかを確認する方法。

SELECT column_name 
FROM information_schema.columns 
WHERE table_name='x' and column_name='y';

解決方法は?

ここでは、"DO"ステートメントを使用した簡単なバージョンを紹介します。

DO $$ 
    BEGIN
        BEGIN
            ALTER TABLE <table_name> ADD COLUMN <column_name> <column_type>;
        EXCEPTION
            WHEN duplicate_column THEN RAISE NOTICE 'column <column_name> already exists in <table_name>.';
        END;
    END;
$$

しかし、これは自己完結型のクエリであり、カラムがすでに存在する場合にのみメッセージを出力し、存在しない場合は追加し、その他のエラー (無効なデータ型など) では失敗し続けます。

もし、外部ソースからのランダムな文字列であれば、これらの方法のどれを行うこともお勧めしません。 どのような方法(クライアントサイドまたはサーバーサイドの動的な文字列をクエリとして実行)を使用する場合でも、SQLインジェクション攻撃を受ける可能性があり、災いのもととなります。