如果表在 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