PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

защо postgres дава едновременно грешка при актуализиране на ред, когато изрично заключвам цялата таблица

Благодарение на коментара на @sudo по-горе, ако преместих изявленията така:

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;

тогава изглежда, че избягва проблема, използвах големи данни (всъщност го фалшифицирах с повтарящи се цикли през едни и същи данни). Имайте предвид, че това може да не е най-ефективният начин да правите подобни неща, но работи. Проблемът с опита, посочен във въпроса е, че заключването вероятно е ограничено само до транзакцията, в която е дефинирано, и следователно създаването на функция все още е извън нейния обхват, т.е. не е заключено, следователно се появява конфликтът. Но сега всичко изглежда наред.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql обработка на транзакции с java

  2. Възникна грешка при инсталирането на pg (0.17.1) и Bundler не може да продължи

  3. Извличане на публикации от неблокиращи потребители

  4. Как да поставите psql на пътя, когато използвате Postgres.app на OS X?

  5. Как мога да добавя колона, която не позволява нулеви стойности в база данни на Postgresql?