Tag: dynamic sql

创buildPostgreSQL ROLE(用户),如果它不存在

如何编写一个SQL脚本来在PostgreSQL 9.1中创build一个ROLE,但是如果它已经存在则不会引发错误? 目前的脚本只有: CREATE ROLE my_user LOGIN PASSWORD 'my_password'; 如果用户已经存在,则失败。 我想要这样的东西: IF NOT EXISTS (SELECT * FROM pg_user WHERE username = 'my_user') BEGIN CREATE ROLE my_user LOGIN PASSWORD 'my_password'; END; …但这不起作用 – IF似乎不支持在普通的SQL。 我有一个batch file,创build一个PostgreSQL 9.1数据库,angular色和一些其他的东西。 它调用psql.exe,传入一个SQL脚本的名字来运行。 到目前为止,所有这些脚本都是普通的SQL,如果可能的话,我想避免使用PL / pgSQL等。

在触发器函数中插入dynamic表名

我不知道如何实现如下内容: CREATE OR REPLACE FUNCTION fnJobQueueBEFORE() RETURNS trigger AS $$ DECLARE shadowname varchar := TG_TABLE_NAME || 'shadow'; BEGIN INSERT INTO shadowname VALUES(OLD.*); RETURN OLD; END; $$ LANGUAGE plpgsql; 即将值插入到具有dynamic生成名称的表中。 执行上面的代码产生: ERROR: relation "shadowname" does not exist LINE 1: INSERT INTO shadowname VALUES(OLD.*) 它似乎build议variables不扩展/允许作为表名称。 我在Postgres手册中找不到这个参考。 我已经用EXECUTE试验过了,如下所示: EXECUTE 'INSERT INTO ' || quote_ident(shadowname) || ' VALUES ' […]