小编Eth*_*han的帖子

如何在Postgres中使用两个DELETE查询死锁?

在我们使用Postgres工作的许多事情中,我们将其用作某些类型的远程请求的缓存.我们的架构是:

CREATE TABLE IF NOT EXISTS cache (
    key VARCHAR(256) PRIMARY KEY,
    value TEXT NOT NULL,
    ttl TIMESTAMP DEFAULT NULL
);

CREATE INDEX IF NOT EXISTS idx_cache_ttl ON cache(ttl);
Run Code Online (Sandbox Code Playgroud)

此表没有触发器或外键.更新通常是:

INSERT INTO cache (key, value, ttl)
VALUES ('Ethan is testing8393645', '"hi6286166"', sec2ttl(300))
ON CONFLICT (key) DO UPDATE
SET value = '"hi6286166"', ttl = sec2ttl(300);
Run Code Online (Sandbox Code Playgroud)

(sec2ttl定义为:)

CREATE OR REPLACE FUNCTION sec2ttl(seconds FLOAT)
RETURNS TIMESTAMP AS $$
BEGIN
    IF seconds IS NULL THEN
        RETURN NULL;
    END IF;
    RETURN now() + …
Run Code Online (Sandbox Code Playgroud)

postgresql deadlock transactions

5
推荐指数
1
解决办法
1103
查看次数

标签 统计

deadlock ×1

postgresql ×1

transactions ×1