web-dev-qa-db-ja.com

タイムゾーン付きのPostgres自動挿入タイムスタンプ(インド)

クエリが挿入されるときにゾーンでタイムスタンプを自動的に挿入する方法はありますか? (id auto incrementと同じように、sqlのパラメーターを時間として渡したくないので、zoneを使用する場合はどこでも同じです)pgバージョン9.1。そして、希望する時間形式を使用する方法は?

1
Abhijit Gujar

実は、あなたの質問についてコメントしたいと思います。私はここでの評判が低いので、それを行うことはできません。それで、あなたの質問に合うかどうか答えることにしました。

始めましょう。最初に「クエリが挿入された」と判断しますか?

私はあなたの「クエリが挿入される」という仮定を持っています。 「クエリが挿入される」とは、データベースに挿入または影響を受けるすべてのクエリ(挿入、更新、削除など)であり、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つの機能にそれらをすべて組み合わせることもできます。

6
meisyal