PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

CREATE DATABASE innerhalb der Transaktion

Wenn Sie es versuchen, erhalten Sie den Fehler:

ERROR:  CREATE DATABASE cannot run inside a transaction block

Dies kommt von src/backend/access/transam/xact.c (Zeile 3023 in meinen Quellen, aber je nach Version unterschiedlich), in PreventTransactionChain(...) .

Der Kommentar dort erklärt das:

Für CREATE DATABASE es wird von src/backend/tcop/utility.c aufgerufen in standard_ProcessUtility unter dem Fall für T_CreatedbStmt , aber leider gibt es keinen informativen Kommentar, der sagt, warum speziell CREATE DATABASE kann in einer Transaktion nicht sicher ausgeführt werden.

Wenn ich mir die Quellen ansehe, kann ich sehen, dass es zum einen einen Checkpoint erzwingt.

Insgesamt sehe ich aber nichts, was wirklich danach schreit „wir können das nicht transaktional machen“. Es ist eher "wir haben die Funktionalität nicht implementiert, um dies transaktional zu tun".