sql >> Database >  >> RDS >> PostgreSQL

waarom postgres tegelijkertijd een rij-update geeft wanneer ik de hele tabel expliciet vergrendel?

Dankzij de opmerking van @sudo hierboven, als ik de uitspraken als volgt heb verplaatst:

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;

dan lijkt het probleem te voorkomen, ik heb grote gegevens gebruikt (eigenlijk vervalst met herhaalde lussen door dezelfde gegevens). Houd er rekening mee dat het misschien niet de meest efficiënte manier is om dit soort dingen te doen, maar het werkt. Het probleem met de poging gegeven in de vraag was dat het slot waarschijnlijk alleen beperkt was tot de transactie waarin het was gedefinieerd en dat het creëren van een functie nog steeds buiten het bereik lag, d.w.z. niet vergrendeld, vandaar dat het conflict verscheen. Maar alles lijkt nu goed en dandy.




  1. Codeigniter toont lege pagina zonder fout

  2. CodeIgniter - Een afbeelding uploaden via een formulier, de locatie van de afbeelding opslaan in de database

  3. Records uit Oracle sorteren met meerdere decimalen (.)

  4. 4 manieren om een ​​getal om te zetten naar een percentage in SQL Server (T-SQL)