如何编写一个SQL脚本来在PostgreSQL 9.1中创建一个ROLE,但如果它已经存在则不会引发错误?
当前脚本只有:
CREATE ROLE my_user LOGIN PASSWORD 'my_password';
Run Code Online (Sandbox Code Playgroud)
如果用户已存在,则会失败.我喜欢这样的东西:
IF NOT EXISTS (SELECT * FROM pg_user WHERE username = 'my_user')
BEGIN
CREATE ROLE my_user LOGIN PASSWORD 'my_password';
END;
Run Code Online (Sandbox Code Playgroud)
...但是这不起作用 - IF在纯SQL中似乎不支持.
我有一个批处理文件,可以创建PostgreSQL 9.1数据库,角色和其他一些东西.它调用psql.exe,传入要运行的SQL脚本的名称.到目前为止,所有这些脚本都是纯SQL,我想尽可能避免使用PL/pgSQL等.
作为PL/pgSQL的新手,这个函数中双美元符号的含义是什么:
CREATE OR REPLACE FUNCTION check_phone_number(text)
RETURNS boolean AS $$
BEGIN
IF NOT $1 ~ e'^\\+\\d{3}\\ \\d{3} \\d{3} \\d{3}$' THEN
RAISE EXCEPTION 'Wrong formated string "%". Expected format is +999 999';
END IF;
RETURN true;
END;
$$ LANGUAGE plpgsql STRICT IMMUTABLE;
Run Code Online (Sandbox Code Playgroud)
我猜,在RETURNS boolean AS $$,$$是一个占位符.
最后一行有点神秘: $$ LANGUAGE plpgsql STRICT IMMUTABLE;
顺便说一句,最后一行是什么意思?