如果根据 SELECT 语句不存在,则创建 TABLE

CREATE TABLE if not exists based on a SELECT statement

我想根据 PostgreSQL 9.2 中的 select 语句创建一个 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

有人可以建议我怎样才能做到这一点。

我确实为此找到了替代品。我使用了下面提到的代码。

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;