我希望能够创建一个包含当前月份的新表。
基本上,我将创建一个 python 脚本,每个月都会自动加载大量犯罪数据,这个 python 脚本将创建一个名为 crime_data 的新表(这很简单)。然后,我想运行第二个脚本,该脚本将创建一个新表,其名称带有系统日期月份的日期戳,并过滤掉原始犯罪数据的元素。
这可能吗?
我希望能够创建一个包含当前月份的新表。
基本上,我将创建一个 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;
您需要根据需要对其进行调整,但想法是将查询形成为字符串和EXECUTE
它。
详情在这里:CREATE TABLE AS
to_char()
date_part
VIEW
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)';
您将能够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/pgSQLEXECUTE
语句正是做这两件事。1 - 形成字符串。2 - 将其作为语句执行。