如果表在 PostgreSQL 中不存在則建立表

Bilal Shahid 2023年1月30日
  1. 使用 CREATE TABLE 查詢來建立一個在 PostgreSQL 中不存在的表
  2. 使用 CREATE 或 REPLACE 查詢來建立一個在 PostgreSQL 中不存在的表
  3. 如果 PostgreSQL 中不存在表,則使用 CASE 語句建立表
如果表在 PostgreSQL 中不存在則建立表

PostgreSQL 是一個物件關聯式資料庫系統,這意味著它可以支援比它的競爭者 MySQL 更復雜的資料型別。

除了上述的區別,PostgreSQL 在與 MySQL 或其他資料庫系統編寫查詢時,結構往往非常相似。

因為每一個的主幹都是 RDBMS,所以所有 SQL 查詢在這兩個例項中幾乎相同,只是它們可能單獨建立的每個系統的擴充套件。

在 PostgreSQL 中建立表非常容易,在本文中,我們將討論所有可以編寫查詢以幫助我們建立表的方法。

使用 CREATE TABLE 查詢來建立一個在 PostgreSQL 中不存在的表

執行此操作的最直接的查詢之一是寫出標準 SQL CREATE TABLE,如下所示。

Create table if not exists table_one (
    u_name varchar(100) not null,
    PRIMARY KEY (u_name)
);

此查詢傾向於檢查表在建立時是否不存在,然後建立它。如果該表已經存在,你將收到這樣的 NOTICE

輸出:

NOTICE: relation "table_one" already exists, skipping

除了建立表之外,你還可以檢視它的工作情況。你可以使用 INSERT 命令輸入名稱,然後呼叫 SELECT 操作來輸出表格。

INSERT into table_one values('John');

select * from table_one;

輸出:

輸出帶有名稱的 Postgre 資料庫表

使用 CREATE 或 REPLACE 查詢來建立一個在 PostgreSQL 中不存在的表

我們還可以使用 CREATE 或 REPLACE 方法建立一個函式來建立表。

你可以使用下面給出的程式碼來執行這樣的操作:

CREATE or replace FUNCTION create_user_specific_table()
    RETURNS void
    LANGUAGE plpgsql AS
$func$
BEGIN
    IF EXISTS (SELECT FROM pg_catalog.pg_tables
                WHERE  tablename  = 'table_one') THEN
        RAISE NOTICE 'Table table_one already exists.';
    ELSE
        CREATE TABLE table_one (u_name varchar(50));
    END IF;
END
$func$;

SELECT create_user_specific_table();

INSERT INTO table_one (u_name) values('Jonathon');

select * from table_one;

輸出:

輸出 Postgre 資料庫檢視

現在,讓我們嘗試分析它是如何工作的。你會看到在定義的函式後面寫著 CREATEREPLACE

CREATE 或 REPLACE 傾向於替換系統內部給定的現有函式定義,如果它已經整合到資料庫中。因此,你在一次又一次地呼叫該函式時不會遇到錯誤。

它可以有效地用於測試,而不是刪除列出的函式然後重新建立它。

$func$ 是函式的開始和結束標記。在函式內部,如果表已經存在於列出的表中,則不會建立它。

相反,它會發出表已存在的通知。RAISE NOTICE 功能是實現此功能的功能。

此函式的不同實現可用於在 PostgreSQL 中建立表。你也可以修改此功能,因為它更適合你的需要。

如果 PostgreSQL 中不存在表,則使用 CASE 語句建立表

CREATE OR REPLACE FUNCTION create_user_specific_table()
    RETURNS void
    LANGUAGE plpgsql AS
$func$
BEGIN
    IF EXISTS (SELECT FROM pg_catalog.pg_tables
                WHERE  tablename  = 'table_one') THEN
        RAISE NOTICE 'Table table_one already exists.';
    ELSE
        CREATE TABLE table_one (u_name varchar(50) not null
                                , PRIMARY KEY (u_name));
    END IF;
END
$func$;
SELECT CASE WHEN (SELECT true::BOOLEAN
    FROM   pg_catalog.pg_tables
    WHERE  tablename  = 'table_one'
    ) THEN (SELECT 'success'::void)
    ELSE (SELECT create_user_specific_table())
END;

INSERT INTO table_one (u_name) values('Jonathon');

select * from table_one;

上面的程式碼與上面給出的方法沒有什麼不同。它用 CASE 語句替換了簡單的 SELECT 查詢。

SELECT CASEif else 語句相同。當 tablename 等於 table_one 時,它返回一個 true

如果表已經存在,則返回 Success;否則,它將呼叫表建立函式。它非常簡單,可以有效地用於在 CASE 表示法中實現 IF EXISTS

作者: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

相關文章 - Postgres Table