我想复制表模式,但仅当目标表尚不存在时才会复制:
CREATE TABLE IF NOT EXISTS my_table_secondary as select * from my_table_primary
问题:如果存在my_secondary_table
,则运行此操作会导致:
ERROR: Syntaxerror at "as"
。
我该怎么做才能使这个sql语句有效? (postgres 9.4)
答案 0 :(得分:0)
要复制表的架构,您需要完全不同的语法。
create table if not exists my_table_secondary (
like my_table_primary including all
);
INCLUDING ALL是包含默认值的缩写形式 约束包括包括评论在内的存储的索引。
它不会复制外键约束。见CREATE TABLE。搜索“LIKE子句”。
答案 1 :(得分:0)
尝试这种方法:
CREATE OR REPLACE VIEW my_view AS SELECT * FROM my_table_primary;
CREATE TABLE IF NOT EXISTS my_table_secondary LIKE my_view;
INSERT INTO my_table_secondary
SELECT * FROM my_view
WHERE NOT EXISTS ( SELECT * FROM my_table_secondary );
更多关于CREATE TABLE ... LIKE:http://www.postgresql.org/docs/9.1/static/sql-createtable.html