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

VYTVOŘTE DATABÁZI uvnitř transakce

Když to zkusíte, zobrazí se chyba:

ERROR:  CREATE DATABASE cannot run inside a transaction block

Toto pochází z src/backend/access/transam/xact.c (řádek 3023 na mých zdrojích, ale liší se podle verze), v PreventTransactionChain(...) .

Komentář tam vysvětluje, že:

Pro CREATE DATABASE volá se z src/backend/tcop/utility.c v standard_ProcessUtility pod případem T_CreatedbStmt , ale bohužel zde není žádný informativní komentář, který by říkal, proč konkrétně CREATE DATABASE není bezpečné spustit v transakci.

Když se podívám na zdroje, vidím, že to za prvé vynutí kontrolní bod.

Celkově však nevidím nic, co by skutečně křičelo „tohle nemůžeme udělat transakční“. Je to spíše „neimplementovali jsme funkci, abychom to provedli transakční“.



  1. Je možné snížit proměnnou v MySQL?

  2. Přepisování dotazů pro zlepšení výkonu

  3. Jak vybrat nejmenší hodnotu z více sloupců pomocí PHP

  4. 2 způsoby, jak vložit nový řádek do řetězce v SQLite