PostgreSQL 找到 CREATE TABLE 语句
PostgreSQL FOUND for CREATE TABLE statements
我正在创建一个函数,它将创建一个新的 table 并将有关该 table 的信息插入到其他 table 中。
要创建 table 我正在使用
CREATE TABLE IF NOT EXISTS
声明。遗憾的是,它没有更新 PostgreSQL 中的 FOUND 特殊变量,我也找不到任何其他可以更新的变量。
在 PL/PGSQL 中有什么方法可以知道该语句是否创建了 table?
它的目标是不将其他 table 中的信息加倍。
否,没有任何信息显示此命令是否创建了 table。 found
变量在查询执行后更新 - 而不是在 DDL 命令后。有保证所以在这个命令之后,table 将是或者这个命令失败异常。
您可以将 CREATE TABLE AS
与 ON_ERROR_ROLLBACK
结合使用:
BEGIN;
-- Do inital stuff
\set ON_ERROR_ROLLBACK on
CREATE TABLE my_table AS
SELECT id, name FROM (VALUES (1, 'Bob'), (2, 'Mary')) v(id, name);
\set ON_ERROR_ROLLBACK off
-- Do remaining stuff
END;
说白了,with \set ON_ERROR_ROLLBACK on
postgres会在每条语句之前创建一个保存点,并根据该语句的成功自动回滚到这个保存点或释放它。
即使 table 创建失败,上面的代码也会执行初始和剩余的内容。
我正在创建一个函数,它将创建一个新的 table 并将有关该 table 的信息插入到其他 table 中。
要创建 table 我正在使用
CREATE TABLE IF NOT EXISTS
声明。遗憾的是,它没有更新 PostgreSQL 中的 FOUND 特殊变量,我也找不到任何其他可以更新的变量。
在 PL/PGSQL 中有什么方法可以知道该语句是否创建了 table?
它的目标是不将其他 table 中的信息加倍。
否,没有任何信息显示此命令是否创建了 table。 found
变量在查询执行后更新 - 而不是在 DDL 命令后。有保证所以在这个命令之后,table 将是或者这个命令失败异常。
您可以将 CREATE TABLE AS
与 ON_ERROR_ROLLBACK
结合使用:
BEGIN;
-- Do inital stuff
\set ON_ERROR_ROLLBACK on
CREATE TABLE my_table AS
SELECT id, name FROM (VALUES (1, 'Bob'), (2, 'Mary')) v(id, name);
\set ON_ERROR_ROLLBACK off
-- Do remaining stuff
END;
说白了,with \set ON_ERROR_ROLLBACK on
postgres会在每条语句之前创建一个保存点,并根据该语句的成功自动回滚到这个保存点或释放它。
即使 table 创建失败,上面的代码也会执行初始和剩余的内容。