PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Czy procedury składowane działają w transakcji bazy danych w Postgresie?

Ściśle mówiąc, Postgres nie miał procedury przechowywane zgodnie z definicją w normie ISO/IEC przed wersją 11. Termin ten jest często używany nieprawidłowo w odniesieniu do funkcji , które zapewniają wiele takich samych funkcji (i więcej), jak inne RDBMS z „procedurami składowanymi”. Główną różnicą jest obsługa transakcji.

  • Jakie są różnice między „procedurami składowanymi” a „funkcjami składowanymi”?

Prawdziwe procedury przechowywane zostały wreszcie wprowadzone w Postgres 11:

  • Kiedy używać procedury składowanej / funkcji zdefiniowanej przez użytkownika?

Funkcjeatomowe w Postgres i automatycznie uruchamiane w ramach własnej transakcji, chyba że zostanie wywołane w ramach transakcji zewnętrznej. Zawsze działają w ramach jednej transakcji i kończą się sukcesem lub niepowodzeniem całkowicie . W konsekwencji nie można rozpoczynać ani dokonywać transakcji w ramach funkcji. I polecenia, takie jak VACUUM , CREATE DATABASE lub CREATE INDEX CONCURRENTLY które nie działają w kontekście transakcji, nie są dozwolone.

Instrukcja dotycząca PL/pgSQL:

Funkcje i procedury wyzwalające są zawsze wykonywane w ramach transakcji ustanowionej przez zapytanie zewnętrzne — nie mogą rozpocząć ani zatwierdzić tej transakcji, ponieważ nie byłoby kontekstu, w którym mogłyby zostać wykonane. Jednak blok zawierający EXCEPTION klauzula skutecznie tworzy podtransakcję, którą można wycofać bez wpływu na transakcję zewnętrzną.

Obsługa błędów:

Domyślnie każdy błąd występujący w funkcji PL/pgSQL przerywa wykonywanie funkcji, a także otaczającej ją transakcji. Możesz przechwytywać błędy i je usuwać za pomocą BEGIN blok z EXCEPTION klauzula.

Istnieją wyjątki , w tym między innymi:

  • dane zapisywane w plikach dziennika
  • zmiany wprowadzone w sekwencji

    Ważne :Niektóre typy danych i funkcje PostgreSQL mają specjalne zasady dotyczące zachowań transakcyjnych. W szczególności zmiany dokonane w kolejności (a tym samym liczniku kolumny zadeklarowanej przy użyciu serial ) są natychmiast widoczne dla wszystkich innych transakcji i nie są cofane, jeśli transakcja, która wprowadziła zmiany, zostanie przerwana.

  • przygotowane oświadczenia

    • Demo SQL Fiddle
  • połączenia dblink (lub podobne)

    • Czy Postgres obsługuje transakcje zagnieżdżone lub autonomiczne?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLalchemy nie zatwierdza zmian podczas ustawiania roli

  2. Jak Tan() działa w PostgreSQL

  3. Intel SSD, teraz poza sh..err, zawstydzona lista

  4. BŁĄD Java SQL:Relacja nazwa_tabeli nie istnieje

  5. Jak AT TIME ZONE działa w PostgreSQL