我有时两次插入相同的数据时,我有时会在日志中看到以下错误:
error: attempted to delete invisible tuple
at Connection.parseE (/home/ubuntu/vacation-server/node_modules/pg/lib/connection.js:554:11)
at Connection.parseMessage (/home/ubuntu/vacation-server/node_modules/pg/lib/connection.js:381:17)
at Socket.<anonymous> (/home/ubuntu/vacation-server/node_modules/pg/lib/connection.js:117:22)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at readableAddChunk (_stream_readable.js:176:18)
at Socket.Readable.push (_stream_readable.js:134:10)
at TCP.onread (net.js:548:20)
我的查询如下:
INSERT INTO google_places (
id,
data,
geographic_coordinates
) VALUES (
$1,
$2,
ST_GeomFromText('POINT(-118.440908 34.063246)', 4326)
)
ON CONFLICT (id) DO UPDATE
SET data = EXCLUDED.data,
geographic_coordinates = EXCLUDED.geographic_coordinates,
date_updated = CURRENT_TIMESTAMP
RETURNING *
有什么想法?
在9.5.5之前的版本中,在某些特定情况下,敬酒的数据可以提高此例外。我使用基于功能索引(特别是ON CONFLICT (md5(myblob)) DO UPDATE
)的冲突密钥碰到了它,但这是相同的错误。
邮件列表中的此线程具有完整的详细信息。该错误已在9.5.5和9.6中固定,但是我不知道早期版本的Postgres有任何简单的解决方法。我最终不得不使用老式的CTE UpSert。