如何根据表的存在使用sql复制表模式?

时间:2015-04-27 15:20:02

标签: sql postgresql

我想复制表模式,但仅当目标表尚不存在时才会复制:

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)

2 个答案:

答案 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