如果不存在基于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
有人建议我怎么能做到这一点。
答
我确实得到了这个替代。我使用了下面提到的代码。
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;
您可以升级到9.5。使用'if not exist'和'create table as select'加入该版本的可能性 –
在9.2中可以使用其他方法吗? –
看一看[this](http://*.com/a/25897594/3541845) – haihui