現在の月を含む新しいテーブルを作成できるようにしたいと考えています。
基本的に、毎月大量の犯罪データを自動的にロードする Python スクリプトを作成します。この Python スクリプトは、crime_data という名前の新しいテーブルを作成します (これは簡単な作業です)。次に、システム日付の月が日付スタンプされた名前の新しいテーブルを作成し、元の Crime_data の要素を除外する 2 番目のスクリプトを実行します。
これは可能ですか?
現在の月を含む新しいテーブルを作成できるようにしたいと考えています。
基本的に、毎月大量の犯罪データを自動的にロードする Python スクリプトを作成します。この Python スクリプトは、crime_data という名前の新しいテーブルを作成します (これは簡単な作業です)。次に、システム日付の月が日付スタンプされた名前の新しいテーブルを作成し、元の Crime_data の要素を除外する 2 番目のスクリプトを実行します。
これは可能ですか?
可能です。そのような 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
ステートメントはまさにこの 2 つのことを行います。1 - 文字列を形成します。2 - ステートメントとして実行します。