[英]PostgreSQL FOUND for CREATE TABLE statements
我正在創建一個函數,該函數將創建一個新表並將有關該表的信息插入到其他表中。
要創建該表,我正在使用
CREATE TABLE IF NOT EXISTS
陳述。 遺憾的是,它沒有更新 PostgreSQL 中的 FOUND 特殊變量,我也找不到任何其他要更新的變量。
在 PL/PGSQL 中有什么方法可以知道該語句是否創建了表?
它的目標是不使其他表中的信息翻倍。
您可以將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;
說白了, \\set ON_ERROR_ROLLBACK on
postgres \\set ON_ERROR_ROLLBACK on
使用\\set ON_ERROR_ROLLBACK on
會在每條語句之前創建一個保存點,並根據該語句的成功自動回滾到這個保存點或釋放它。
即使表創建失敗,上面的代碼也會執行初始和剩余的內容。
不,如果此命令創建表,則沒有任何信息。 found
變量在查詢執行后更新——而不是在 DDL 命令后更新。 有保證所以在此命令之后,表或此命令失敗將出現異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.