如果表在 PostgreSQL 中不存在則建立表
-
使用
CREATE TABLE
查詢來建立一個在 PostgreSQL 中不存在的表 -
使用
CREATE 或 REPLACE
查詢來建立一個在 PostgreSQL 中不存在的表 -
如果 PostgreSQL 中不存在表,則使用
CASE
語句建立表
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;
輸出:
使用 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;
輸出:
現在,讓我們嘗試分析它是如何工作的。你會看到在定義的函式後面寫著 CREATE
或 REPLACE
。
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 CASE
與 if else
語句相同。當 tablename
等於 table_one
時,它返回一個 true
。
如果表已經存在,則返回 Success;否則,它將呼叫表建立函式。它非常簡單,可以有效地用於在 CASE
表示法中實現 IF EXISTS
。
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