Create PostgreSQL ROLE (user) if it doesn't exist

前端 未结 10 1755
旧时难觅i
旧时难觅i 2020-12-12 15:47

How do I write an SQL script to create a ROLE in PostgreSQL 9.1, but without raising an error if it already exists?

The current script simply has:

CR         


        
10条回答
  •  天命终不由人
    2020-12-12 16:39

    Here is a generic solution using plpgsql:

    CREATE OR REPLACE FUNCTION create_role_if_not_exists(rolename NAME) RETURNS TEXT AS
    $$
    BEGIN
        IF NOT EXISTS (SELECT * FROM pg_roles WHERE rolname = rolename) THEN
            EXECUTE format('CREATE ROLE %I', rolename);
            RETURN 'CREATE ROLE';
        ELSE
            RETURN format('ROLE ''%I'' ALREADY EXISTS', rolename);
        END IF;
    END;
    $$
    LANGUAGE plpgsql;
    

    Usage:

    posgres=# SELECT create_role_if_not_exists('ri');
     create_role_if_not_exists 
    ---------------------------
     CREATE ROLE
    (1 row)
    posgres=# SELECT create_role_if_not_exists('ri');
     create_role_if_not_exists 
    ---------------------------
     ROLE 'ri' ALREADY EXISTS
    (1 row)
    

提交回复
热议问题