Je pense que je suis lu quelque part qu'il était possible de configurer une base de données PostgreSQL pour forcer toutes les transactions à être sérialisables, mais je ne trouve plus ce document.
En fait, j'aimerais forcer le niveau d'isolement de ma base de données à sérialisable différée. Est-ce possible? Si oui, comment?
Vous pouvez définir SERIALIZABLE
comme niveau d'isolation par défaut dans postgresql.conf
:
default_transaction_isolation = 'serializable'
Cela peut confondre les clients qui assument READ COMMITTED
Isolement, alors imo Il est préférable de la définir explicitement dans vos sessions.
Quant au reste, par le manuel :
La propriété de transaction
DEFERRABLE
n'a aucun effet à moins que la transaction soit aussiSERIALIZABLE
etREAD ONLY
... et étant donné les propriétés de ces transactions, j'ai du mal à imaginer que vous souhaitez en faire la valeur par défaut. Êtes-vous peut-être la confondre avec SET CONSTRAINTS DEFERRED
?
Vous pouvez effectuer des transactions en lecture seule et différée par défaut avec:
transaction_read_only = on
transaction_deferrable = on
dans postgresql.conf
Mais c'est vraiment une idée plutôt mauvaise. Au lieu de cela, utilisez simplement un BEGIN
ou SET TRANSACTION
Dans votre session avant votre première "réelle" relevé SQL.