我正在使用PostgreSQL,我是SQL初学者.我试图从查询中创建一个表,如果我运行:
CREATE TABLE table_name AS
(....query...)
它很好用.但如果我添加"如果不存在"并运行:
CREATE TABLE IF NOT EXISTS table_name AS
(....query...)
使用完全相同的查询,我得到:
ERROR: syntax error at or near "as"
有什么办法吗?
我正在使用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不同的单独声明,until Postgres version 9.5(见changelog entry)不支持IF NOT EXISTS
条款.(请务必查看所用版本的正确手册版本.)
虽然没有那么灵活,但在某些情况下,CREATE TABLE ... LIKE
语法可能是另一种 Select ;它不是从SELECT
语句中获取其 struct (和内容),而是复制另一个表或视图的 struct .
因此,你可以写这样的东西(未经测试);如果表已经填充,那么最后的插入是一种相当混乱的无所事事的方式:
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;