PostgreSQLのIF THEN ELSEの構文で「ERROR: syntax error at or near “IF” END IF;」
今回はPostgreSQLでIF THEN ELSEを使った場合に、次のようなエラーが出てしまうときの原因と対処法についてお話ししていきます。
1 2 |
Query 3 ERROR at Line 15: : ERROR: syntax error at or near "IF" LINE 2: END IF; |
PostgreSQLのバージョンは14系です。
PostgreSQLのIF THEN ELSEの構文で「ERROR: syntax error at or near “IF" END IF;」
結論から言うと、私の場合はIF THEN ELSEを使ったSQLの書き方が良くありませんでした。
私は次のようなSQLを最初に組みました。
1 2 3 4 5 6 7 8 |
IF EXISTS ( SELECT FROM pg_user WHERE usename = 'postgres' ) THEN RAISE NOTICE 'User "postgres" already exists. Skipping.'; ELSE CREATE USER postgres; END IF; |
上記のSQLでやりたいことは、ユーザー「postgres」がいるときは何もせずに、ユーザー「postgres」がいなかったときは「postgres」というユーザーを作成するSQLです。
上記を実行したところ、冒頭でも書きましたが次のようなエラーが出てしまいました。
1 2 |
Query 3 ERROR at Line 15: : ERROR: syntax error at or near "IF" LINE 2: END IF; |
結論を言うと、PostgreSQLで「IF-THEN-ELSE」の構文を使いたい場合は、次のようにDOやBEGINでくくらなければなりません。
1 2 3 4 5 6 7 8 9 10 11 12 |
DO $$ BEGIN IF EXISTS ( SELECT FROM pg_user WHERE usename = 'postgres' ) THEN RAISE NOTICE 'User "postgres" already exists. Skipping.'; ELSE CREATE USER postgres; END IF; END $$ |
どうやらPostgreSQLのバージョン9系以上なら、上記のような書き方らしいです。
バージョン9より前の場合は上記のような書き方はできず、関数を使う方法しかないようです。
終わりに
今回はPostgreSQLでIF THEN ELSEを使った場合に、冒頭のエラーが出てしまうときの原因と対処法についてお話しいたしました。
ディスカッション
コメント一覧
まだ、コメントがありません