私はPostgresqlが新しく、私はMySQLからアプリケーションを移行しようとしています。
は、私は次のような構造を持つテーブルがある:PostgreSQLの奇妙な動作
Table "public.tbl_point"
Column | Type | Modifiers | Storage | Description
------------------------+-----------------------+-----------+----------+-------------
Tag_Id | integer | not null | plain |
Tag_Name | character varying(30) | not null | extended |
Quality | integer | not null | plain |
Execute | integer | not null | plain |
Output_Index | integer | not null | plain |
Last_Update | abstime | | plain |
Indexes:
"tbl_point_pkey" PRIMARY KEY, btree ("Tag_Id")
Triggers:
add_current_date_to_tbl_point BEFORE UPDATE ON tbl_point FOR EACH ROW EXECUTE PROCEDURE update_tbl_point()
Has OIDs: no
私はlibpqを使用してCプログラムを通じてクエリを実行すると:
ERROR: record "new" has no field "last_update"
CONTEXT: PL/pgSQL function "update_tbl_point" line 3 at assignment
:
UPDATE tbl_point SET "Execute"=0 WHERE "Tag_Id"=0
は、私は次の出力を得ましたpgAdminIIIを使って "Execute"や他の列の値を変更しようとすると、まったく同じエラーが出ます。
"Last_Update"から "last_update"に列名を変更すると、すべて正常に機能します。
私は自分のデータベースにある他のテーブルと同じ問題を発見しました。カラムは常にabstimeカラムまたはtimestampカラムとともに表示されます。
new.last_update = current_timestamp;
をので、あなたのトリガ機能を修正new."Last_Update"
を使用する必要があります。
ありがとう、私の友人!あなたの説明は完璧でした!アレクサンドラ – user1131031