sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQL ROLE(ユーザー)が存在しない場合は作成します

    考えていたのと同じように単純化します。

    DO
    $do$
    BEGIN
       IF NOT EXISTS (
          SELECT FROM pg_catalog.pg_roles  -- SELECT list can be empty for this
          WHERE  rolname = 'my_user') THEN
    
          CREATE ROLE my_user LOGIN PASSWORD 'my_password';
       END IF;
    END
    $do$;
    

    (@a_horse_with_no_nameの回答に基づいて構築され、@ Gregoryのコメントで改善されました。)

    たとえば、 CREATE TABLEとは異なります IF NOT EXISTSはありません CREATE ROLEの句 (少なくとも12ページまで)。そして、あなたはできません プレーンSQLで動的DDLステートメントを実行します。

    「PL/pgSQLを回避する」という要求は、別のPLを使用しない限り不可能です。 DO ステートメントは、デフォルトの手続き言語としてplpgsqlを使用します。構文では、明示的な宣言を省略できます:

    DO [LANGUAGE lang_name ]コード
    ...
    lang_name
    コードが記述されている手続き型言語の名前。省略された場合、デフォルトは plpgsqlです。 。



    1. SQLWHERE複数の条件

    2. mysqlプリペアドステートメントエラー:MySQLSyntaxErrorException

    3. LIKE演算子がMySQLでどのように機能するか

    4. MySQLでのUUIDパフォーマンス?