如果不存在基于SELECT语句的CREATE TABLE

问题描述:

如果基于PostgreSQL 9.2中的select语句不存在,我想创建一个表。当我使用下面的查询时,我收到如下所述的错误。如果不存在基于SELECT语句的CREATE TABLE

查询:

CREATE TABLE IF NOT EXISTS ccdb_archival.bills 
SELECT *, now() AS archival_date 
FROM ccdb.bills 
WHERE bill_date::date >= current_date - interval '3 years' AND bill_date::date < current_date - interval '8 years'; 

错误:

ERROR: syntax error at or near "SELECT" 
LINE 2: SELECT *, now() AS archival_date 

有人建议我怎么能做到这一点。

+1

您可以升级到9.5。使用'if not exist'和'create table as select'加入该版本的可能性 –

+0

在9.2中可以使用其他方法吗? –

+0

看一看[this](http://*.com/a/25897594/3541845) – haihui

我确实得到了这个替代。我使用了下面提到的代码。

CREATE OR REPLACE FUNCTION ccdb_archival.ccdb_archival() 
RETURNS void AS 
$BODY$ 
BEGIN 

CREATE TABLE IF NOT EXISTS ccdb_archival.bills (LIKE ccdb.bills INCLUDING ALL); 
    BEGIN 
     ALTER TABLE ccdb_archival.bills ADD COLUMN archival_date timestamp; 
    EXCEPTION 
     WHEN duplicate_column THEN RAISE NOTICE 'column archival_date already exists in ccdb_archival.bills.'; 
    END; 

INSERT INTO ccdb_archival.bills 
SELECT *, now() AS archival_date 
FROM ccdb.bills 
WHERE bill_date::date >= current_date - interval '3 years' AND bill_date::date < current_date - interval '8 years'; 


END; 
$BODY$ 
    LANGUAGE plpgsql VOLATILE 
    COST 100;