sql >> Databáze >  >> RDS >> PostgreSQL

proč postgres dává souběžně aktualizovanou chybu řádku, když explicitně zamykám celou tabulku

Díky výše uvedenému komentáři @sudo, Kdybych přesunul výroky takto:

BEGIN;    
    SELECT pg_advisory_xact_lock(2142616474639426746);
    CREATE OR REPLACE FUNCTION my_function() ....
    --the whole function definition is wrapped by an advisory lock
    SELECT * FROM my_function();
COMMIT;

pak se zdá, že se tomuto problému vyhýbám, použil jsem velká data (ve skutečnosti je předstíral opakovanými smyčkami přes stejná data). Všimněte si, že to nemusí být nejúčinnější způsob, jak to udělat, ale funguje to. Problém s pokusem uvedeným v otázce bylo, že zámek byl pravděpodobně omezen pouze na transakci, ve které byl definován, a proto vytvoření funkce bylo stále mimo jeho rozsah, tj. nebylo uzamčeno, a proto se objevil konflikt. Ale teď se vše zdá být v pořádku.




  1. Oracle 12c XML získá hodnotu z odpovědi

  2. Docker MySQL – nelze se připojit z aplikace Spring Boot k databázi MySQL

  3. Jak povolit tichý režim pro příkazy Postgres na Heroku

  4. Jak vytvořit tabulku postgresql při spuštění pomocí docker compose