Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Postgres-创建表,但名称为当前月份_Postgresql - Fatal编程技术网

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

Postgresql Postgres-创建表,但名称为当前月份,postgresql,Postgresql,我希望能够创建一个包含当前月份的新表 基本上,我将创建一个python脚本,每个月将自动加载大量犯罪数据,这个python脚本将创建一个名为crime_data的新表(这是最简单的部分)。然后,我想运行第二个脚本,该脚本将创建一个新表,表名带有系统日期月的日期戳,并过滤掉原始数据的元素 这可能吗 这是可能的。尝试创建PL/pgSQL函数,如下所示: BEGIN EXECUTE 'CREATE TABLE crime_data_'||to_char(CURRENT_DATE, 'Month')|

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

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


这可能吗

这是可能的。尝试创建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;
您需要根据需要对其进行调整,但想法是将查询形成一个字符串并执行它

详情如下:

UPD最好使用所需的数据而不是表格创建一个
视图

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)';
您将能够从此
视图
中选择
,因为它是表,您不需要保留重复的数据。此处的详细信息:

UPD2要测试这个东西:

1) 做:

2) 将此
选择的结果作为常规语句运行


PL/pgSQL
EXECUTE
语句正好做这两件事。1-形成字符串。2-将其作为语句执行。

此类表的用途是什么?您是否打算保留超过一年的数据?因此,我刚刚尝试在第一个实例中这样做,以使语句正确创建表crime_data_124;to_char(CURRENT_DATE,'Month')|作为SELECT*FROM crime_data,但在|处获得错误消息。创建视图不是一个选项,因为原始犯罪数据将被删除。@Med您不能直接在
CREATE TABLE
语句中使用concat(| |运算符)。看到我的更新。所以我运行了D2 1)并看到一列文本?使用“CREATETABLE CREATE\u data\u DECEDUCT as”语句,但我不了解如何获取此select语句的结果并运行它。我使用psycopg2作为引擎(如果这是正确的话)通过python运行sql语句,因此我不明白如何将UPD2)作为一个自动的“thingy!”过程。@Med UPD2用于测试目的。要实现真正的自动操作,您需要在DB模式中创建PL/pgSQL函数,函数体中包含
EXECUTE…
。@Med您可以阅读如何创建函数。
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)'