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

Съхранените процедури изпълняват ли се в транзакция на база данни в Postgres?

Строго погледнато, Postgres не има запазени процедури както е дефинирано в стандарта ISO/IEC преди версия 11. Терминът често се използва неправилно за обозначаване на функции , които предоставят голяма част от същата функционалност (и повече), както другите RDBMS предоставят със "запомнени процедури". Основната разлика е обработката на транзакции.

  • Какви са разликите между „Съхранени процедури“ и „Съхранени функции“?

Истински запазени процедури най-накрая са представени с Postgres 11:

  • Кога да се използва съхранена процедура/функция, дефинирана от потребителя?

Функции са атомни в Postgres и автоматично се изпълняват в собствената им транзакция, освен ако не са извикани в рамките на външна транзакция. Те винаги се изпълняват в рамките на една транзакция и успяват или се провалят напълно . Следователно, човек не може да започва или да извършва транзакции в рамките на функцията. И команди като VACUUM , CREATE DATABASE , или CREATE INDEX CONCURRENTLY които не се изпълняват в контекст на транзакция, не са разрешени.

Ръководството за PL/pgSQL:

Функциите и тригерните процедури винаги се изпълняват в рамките на транзакция, установена от външна заявка — те не могат да стартират или да извършат тази транзакция, тъй като няма да има контекст, в който да се изпълняват. Въпреки това, блок, съдържащ EXCEPTION клаузата ефективно формира подтранзакция, която може да бъде отменена, без да се засяга външната транзакция.

Обработка на грешки:

По подразбиране всяка грешка, възникнала във функцията PL/pgSQL, прекратява изпълнението на функцията, както и на околните транзакции. Можете да улавяте грешки и да се възстановявате от тях, като използвате BEGIN блок с EXCEPTION клауза.

Имаизключения , включително, но не само:

  • данни, записани в регистрационни файлове
  • промени, направени в последователност

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

  • подготвени изявления

    • Демонстрация на SQL Fiddle
  • dblink повиквания (или подобни)

    • Postgres поддържа ли вложени или автономни транзакции?


  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 към отдалечена база данни чрез pgAdmin

  2. Как да вмъкна няколко стойности в таблица на postgres наведнъж?

  3. Как да създадете редни числа в PostgreSQL

  4. PostgreSQL, SELECT от max id

  5. Съхранение на изображения в bytea полета в PostgreSQL база данни