クエリが挿入されるときにゾーンでタイムスタンプを自動的に挿入する方法はありますか? (id auto incrementと同じように、sqlのパラメーターを時間として渡したくないので、zoneを使用する場合はどこでも同じです)pgバージョン9.1。そして、希望する時間形式を使用する方法は?
実は、あなたの質問についてコメントしたいと思います。私はここでの評判が低いので、それを行うことはできません。それで、あなたの質問に合うかどうか答えることにしました。
始めましょう。最初に「クエリが挿入された」と判断しますか?
私はあなたの「クエリが挿入される」という仮定を持っています。 「クエリが挿入される」とは、データベースに挿入または影響を受けるすべてのクエリ(挿入、更新、削除など)であり、logで示されます。ここでのログとは、log tableを意味し、triggerはすべてのクエリを処理します。 OK。以下の例でわかりやすく説明します。
まず、log tableを次のように定義します。
CREATE TABLE query_log (
log_id SERIAL PRIMARY KEY,
log_timestamp TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
action VARCHAR(20) NOT NULL
);
Action列は、クエリが誰かによって実行されたかどうかを決定します(たとえば、誰かが挿入したとき、アクション列は「挿入」になります)。次に、log tableに書き込む内容を処理するトリガーを作成する必要があります。クエリの影響を受けるテーブルによって異なります。たとえば、table queryに対してクエリを実行します。そう、
CREATE TRIGGER add_insert_query_log
AFTER INSERT ON name_of_table
FOR EACH ROW
EXECUTE PROCEDURE insert_query_log();
そして
CREATE OR REPLACE FUNCTION insert_query_log() RETURNS TRIGGER AS
$$
BEGIN
INSERT INTO query_log VALUES (currval(log_id)), DEFAULT, 'insert');
RETURN NEW;
END
$$ LANGUAGE 'plpgsql';
更新、削除などの別の機能を続行することも、1つの機能にそれらをすべて組み合わせることもできます。