迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > PostgreSQL >

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

作者:迹忆客 最近更新:2023/03/20 浏览次数:

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

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 PSQL 中运行 SQL 文件

发布时间:2023/03/20 浏览次数:178 分类:数据库

本文解释了如何直接从终端/命令行或 psql shell 运行 SQL 文件。为此,你需要指定主机名、端口、用户名和数据库名称。

在 PostgreSQL 中使用循环

发布时间:2023/03/20 浏览次数:124 分类:PostgreSQL

在 PL/SQL 中,你可能需要在 Postgres 中使用循环。我们可以使用 FOR 和 WHILE 语句来创建循环。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便