私のpostgresqlデータベースには54のテーブルがあります。そして、テーブルの大半はデータの作成日時を含みます。私はCreatedDate列を含むすべてのテーブルのグローバルトリガーを作成したいと思います。レコードが挿入されると、このトリガーによって列が更新されます。作成日を含むすべてのテーブルのPostgresqlトリガー
1
A
答えて
3
各テーブルには、独自のトリガを必要としますが、単一のトリガ機能を使用することができます
CREATE TRIGGER set_createddate
BEFORE INSERT ON <table name>
FOR EACH ROW EXECUTE PROCEDURE set_created_date();
あなたはトリガーを設定することができます:あなたはこのようなトリガーを持っている必要があり、各テーブルについて
CREATE FUNCTION set_created_date() RETURNS trigger AS $$
BEGIN
NEW.createddate := CURRENT_TIME;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
をこのコードを含む54個のテーブルすべて(最初にトリガー関数を作成します):
DO $$
DECLARE
t record;
BEGIN
FOR t IN
SELECT * FROM information_schema.columns
WHERE column_name = 'createddate'
LOOP
EXECUTE format('CREATE TRIGGER set_createddate
BEFORE INSERT ON %I.%I
FOR EACH ROW EXECUTE PROCEDURE set_created_date()',
t.schema_name, t.table_name);
END LOOP;
END;
$$ LANGUAGE plpgsql;
このobvio私たちは、createddate
という名前の列を持つ他のテーブルがないと仮定しています。これは、information_schema.columns
テーブルを照会することで簡単に確認できます。
0
パトリックの解決策にいくつかの問題がある人のために。 ここではいくつかの改善と同じコード:
DO $$
DECLARE
t text;
BEGIN
FOR t IN
SELECT table_name FROM information_schema.columns
WHERE column_name = 'createddate'
LOOP
EXECUTE format('CREATE TRIGGER set_createddate
BEFORE INSERT ON %I
FOR EACH ROW EXECUTE PROCEDURE set_created_date()',
t);
END LOOP;
END;
$$ LANGUAGE plpgsql;
+0
一般的に、答えには コードが何を意図しているのか説明し、他のものを導入しないで問題を解決する理由が含まれていれば、 – Peter
関連する問題
- 1. PostgreSQL - 日付を含む
- 2. パンダにすべての日付を含むプロットを作成する
- 3. テーブル更新に関するログ情報を含むトリガーを作成
- 4. postgresql月の日のテーブルを作成する
- 5. すべてのPostgreSQLエラーコードの列挙型を含むライブラリ
- 6. PostgreSQL - 結合テーブルのすべての行を含める
- 7. ログを含む別のテーブルからテーブルを作成する
- 8. Sequelize Migration - PostgreSQLでトリガーを作成する
- 9. すべての依存関係を含むスタンドアロンDLLの作成
- 10. すべてのテーブルのSQL Server 2014修正日トリガー
- 11. postgresqlテーブル内のすべての日付を前日に変更する
- 12. 日は私が4つの日付を含むテーブルを持っている現時点ではPostgreSQL
- 13. SQL Serverでテーブルの作成と変更ステートメントを含むすべてのスクリプトを生成しますか?
- 14. インデックスを含む別のテーブルに基づいてテーブルを作成する
- 15. 「すべて」を含むWebアプリケーションインストールパッケージを作成しますか?
- 16. PostgreSQL:ビュー/テーブルの作成/置換/変更日?
- 17. 最初の行にボタンを含むテーブルを作成する
- 18. MySQLで3つのテーブルを含むレポートを作成する
- 19. 別のSQLテーブルの名前のリストを含むドロップダウンメニューを含むSQLデータベースからテーブルを作成
- 20. JDBCを使用してPostgreSQLトリガーを作成する
- 21. postgresqlの[Column]に[Word]を含むすべての行を集計します。
- 22. PostgreSQL:終了日を含むdaterangeを取得するには?
- 23. リストのリストからチャートデータを作成する(開始日/終了日を含む)
- 24. PostgreSQLでインクルード/オーダー作業を含むRoRデータベースクエリを作成するには?
- 25. 投稿後のリンクを含むJSFテーブルの作成方法
- 26. PostgreSQL - すべてのテーブルの階層リスト
- 27. PostgreSQLドッカーの画像でテーブルを作成
- 28. すべてのデータファイルを含むmfcプロジェクトのスタンドアロンセットアップファイルを作成する方法
- 29. 毎日トリガーを作成する
- 30. ボタンとディレクトリのファイルリストを含むテーブルを作成
は、なぜあなたは単に今 'デフォルト()'に列を変更しないでください? –
デフォルトのnow()は、SQLの挿入クエリで正常に動作します。しかし、QGISのようなサードパーティのソフトウェアを使ってテーブルにレコードを挿入しています。この発言では、新しいレコードはフォームを使って手動で作成されています。日付を手動で作成するのを忘れた場合、日付フィールドはデータベーステーブルにNULLになります。 – barteloma
なぜあなたはgis.stackexchange.comに尋ねてみませんか?これに対する解決策は間違いありません。私はqgisが挿入時のデフォルトを処理できないとは思っていません。 –