web-dev-qa-db-fra.com

Comment définir l'isolement sur Serializable Referrable pour une base de données complète PostgreSQL?

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?

2

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 aussi SERIALIZABLE et READ 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.

3
Craig Ringer