Postgres - 创建表,但名称是当前月份

时间:2012-12-05 15:11:13

标签: postgresql

我希望能够创建一个包含当前月份的新表格。

基本上我要创建一个python脚本,每个月会自动加载大量的犯罪数据,这个python脚本会创建一个名为crime_data的新表(这很容易)。然后,我想运行第二个脚本,该脚本将创建一个新表,其名称带有系统日期月份的日期戳,并过滤掉原始crime_data的元素。

这可能吗?

1 个答案:

答案 0 :(得分:1)

有可能。尝试创建类似的PL / pgSQL函数:

BEGIN

EXECUTE 'CREATE TABLE crime_data_'||to_char(CURRENT_DATE, 'Month')||' AS
SELECT *
FROM crime_data cd
WHERE date_part(''month'', cd.date) = date_part(''month'', CURRENT_DATE)';

END;

您需要根据自己的需要对其进行调整,但我们的想法是将查询形成为字符串并EXECUTE

此处的详细信息:CREATE TABLE AS to_char() date_part

UPD最好用您需要的数据而不是表创建VIEW

EXECUTE 'CREATE VIEW crime_data_'||to_char(CURRENT_DATE, 'Month')||' AS
SELECT *
FROM crime_data cd
WHERE date_part(''month'', cd.date) = date_part(''month'', CURRENT_DATE)';

您可以SELECT来自VIEW,因为它是表格,您不需要保留重复的数据。详情请见CREATE VIEW

UPD2测试这件事:

1)做:

SELECT 'CREATE TABLE crime_data_'||to_char(CURRENT_DATE, 'Month')||' AS
        SELECT *
        FROM crime_data cd
        WHERE date_part(''month'', cd.date) = date_part(''month'', CURRENT_DATE)'

2)获取此SELECT的结果并将其作为常规语句运行。

PL / pgSQL EXECUTE语句完成了这两件事。 1 - 形成字符串。 2 - 将其作为声明执行。