簡體   English   中英

為 CREATE TABLE 語句找到了 PostgreSQL

[英]PostgreSQL FOUND for CREATE TABLE statements

我正在創建一個函數,該函數將創建一個新表並將有關該表的信息插入到其他表中。
要創建該表,我正在使用

CREATE TABLE IF NOT EXISTS

陳述。 遺憾的是,它沒有更新 PostgreSQL 中的 FOUND 特殊變量,我也找不到任何其他要更新的變量。

在 PL/PGSQL 中有什么方法可以知道該語句是否創建了表?

它的目標是不使其他表中的信息翻倍。

您可以將CREATE TABLE ASON_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM