我希望能够创建一个包含当前月份的新表格。
基本上我要创建一个python脚本,每个月会自动加载大量的犯罪数据,这个python脚本会创建一个名为crime_data的新表(这很容易)。然后,我想运行第二个脚本,该脚本将创建一个新表,其名称带有系统日期月份的日期戳,并过滤掉原始crime_data的元素。
这可能吗?
答案 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 - 将其作为声明执行。