address テーブルに INSERT する前に address_log テーブルに履歴を INSERT する、というコードを書いていて、 address テーブルから SELECT した結果を struct で Scan するとき id を Scan し忘れていることに気づかず、外部キー制約エラー。
pq: insert or update on table "address_log" violates foreign key constraint "address_log_address_id_fk"
print デバッグすると struct の ID フィールドの値は 0 となっていて、パッと見ちゃんと数字なので、「実際は NULL だけど struct になった時点で int64 のゼロ値に変換されていて 0 と表示されている」ということに気づくまで時間がかかった。