Ok, I tried to be clever and I wrote code to avoid inserting duplicate data.
The calling function has a try-catch to recover from this, but I am curious
as to why it failed:
INSERT INTO
mdx_lib.acache_mdx_logic_address_validation
(
address,
postal_code,
address_id
)
SELECT
'306 station 22 1 2 st' AS address,
'29482' AS postal_code,
100165016 AS address_id
WHERE
NOT EXISTS
( SELECT
1
FROM
mdx_lib.acache_mdx_logic_address_validation
WHERE
address = '306 station 22 1 2 st'
AND postal_code = '29482'
)
Exec status=PGRES_FATAL_ERROR error=ERROR: duplicate key value violates
unique constraint "uq_acache_mdx_logic_address_validation_idx"
DETAIL: Key (address, postal_code)=(306 station 22 1 2 st, 29482) already
exists.
The client insists that this process is the only one running, so if he's
right no other process could be inserting a row with the same data between
the SELECT . NOT EXISTS and the actual INSERT operation.
This particular code works as expected right now (SELECT returns 0 rows,
therefore no rows INSERTed).
Should this have worked?
Carlo