如果表在 PostgreSQL 中不存在则创建表

Bilal Shahid 2023年1月30日 2022年5月14日
  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

Author: 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