gpt4 book ai didi

sql - PostgreSQL:如果不存在则创建表 AS

转载 作者:行者123 更新时间:2023-11-29 11:09:39 28 4
gpt4 key购买 nike

我正在使用 PostgreSQL,并且是一名 SQL 初学者。我正在尝试根据查询创建一个表,如果我运行:

CREATE TABLE table_name AS
(....query...)

它工作得很好。但是如果我添加“如果不存在”并运行:

CREATE TABLE IF NOT EXISTS table_name AS
(....query...)

使用完全相同的查询,我得到:

ERROR: syntax error at or near "as"

有什么办法吗?

最佳答案

CREATE TABLE AS被认为是与普通 CREATE TABLE 分开的声明, 和 直到 Postgres 版本 9.5(参见 changelog entry)不支持 IF NOT EXISTS 子句。 (请务必查看您所使用版本的正确版本手册。)

虽然不那么灵活,但在某些情况下,CREATE TABLE ... LIKE 语法可能是一种替代方法;它不是从 SELECT 语句中获取其结构(和内容),而是复制另一个表或 View 的结构。

因此,你可以写这样的东西(未经测试);如果表已经填充,最后的插入是一种相当困惑的方法:

CREATE OR REPLACE VIEW source_data AS SELECT * FROM foo NATURAL JOIN bar;

CREATE TABLE IF NOT EXISTS snapshot LIKE source_data;

INSERT INTO snapshot
SELECT * FROM source_data
WHERE NOT EXISTS ( SELECT * FROM snapshot );

或者,如果您想丢弃以前的数据(例如废弃的临时表),您可以有条件地删除旧表,并无条件地创建新表:

DROP TABLE IF EXISTS temp_stuff;

CREATE TEMPORARY TABLE temp_stuff AS SELECT * FROM foo NATURAL JOIN bar;

关于sql - PostgreSQL:如果不存在则创建表 AS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25896843/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com