Man Linux: Main Page and Category List

NAME

       SET TRANSACTION - set the characteristics of the current transaction

SYNOPSIS

       SET TRANSACTION transaction_mode [, ...]
       SET SESSION CHARACTERISTICS AS TRANSACTION transaction_mode [, ...]

       where transaction_mode is one of:

           ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }
           READ WRITE | READ ONLY

DESCRIPTION

       The  SET  TRANSACTION  command  sets the characteristics of the current
       transaction. It has no  effect  on  any  subsequent  transactions.  SET
       SESSION  CHARACTERISTICS  sets  the default transaction characteristics
       for subsequent  transactions  of  a  session.  These  defaults  can  be
       overridden by SET TRANSACTION for an individual transaction.

       The available transaction characteristics are the transaction isolation
       level and the transaction access mode (read/write or read-only).

       The  isolation  level  of  a  transaction  determines  what  data   the
       transaction can see when other transactions are running concurrently:

       READ COMMITTED
              A statement can only see rows committed before it began. This is
              the default.

       SERIALIZABLE
              All statements of the current  transaction  can  only  see  rows
              committed  before the first query or data-modification statement
              was executed in this transaction.

       The SQL standard defines two additional levels,  READ  UNCOMMITTED  and
       REPEATABLE  READ.   In  PostgreSQL  READ UNCOMMITTED is treated as READ
       COMMITTED, while REPEATABLE READ is treated as SERIALIZABLE.

       The transaction isolation level cannot be changed after the first query
       or  data-modification statement (SELECT, INSERT, DELETE, UPDATE, FETCH,
       or COPY) of a transaction has been executed. See in  the  documentation
       for  more  information  about  transaction  isolation  and  concurrency
       control.

       The transaction access  mode  determines  whether  the  transaction  is
       read/write  or read-only. Read/write is the default. When a transaction
       is read-only,  the  following  SQL  commands  are  disallowed:  INSERT,
       UPDATE, DELETE, and COPY FROM if the table they would write to is not a
       temporary table; all CREATE, ALTER, and DROP commands; COMMENT,  GRANT,
       REVOKE,  TRUNCATE;  and EXPLAIN ANALYZE and EXECUTE if the command they
       would execute is among those listed. This is  a  high-level  notion  of
       read-only that does not prevent all writes to disk.

NOTES

       If  SET  TRANSACTION  is  executed without a prior START TRANSACTION or
       BEGIN, it will appear to have no effect,  since  the  transaction  will
       immediately end.

       It  is  possible to dispense with SET TRANSACTION by instead specifying
       the desired transaction_modes in BEGIN or START TRANSACTION.

       The session default transaction modes can also be set  by  setting  the
       configuration      parameters     default_transaction_isolation     and
       default_transaction_read_only.  (In fact SET SESSION CHARACTERISTICS is
       just  a verbose equivalent for setting these variables with SET.)  This
       means the defaults can be set in  the  configuration  file,  via  ALTER
       DATABASE, etc. Consult in the documentation for more information.

COMPATIBILITY

       Both  commands  are  defined  in the SQL standard.  SERIALIZABLE is the
       default transaction isolation level in the standard. In PostgreSQL  the
       default  is  ordinarily  READ  COMMITTED,  but  you  can  change  it as
       mentioned above. Because of lack of predicate locking, the SERIALIZABLE
       level  is not truly serializable. See in the documentation for details.

       In the SQL standard, there is one other transaction characteristic that
       can  be set with these commands: the size of the diagnostics area. This
       concept is specific to embedded SQL, and therefore is  not  implemented
       in the PostgreSQL server.

       The  SQL standard requires commas between successive transaction_modes,
       but for historical reasons PostgreSQL allows the commas to be  omitted.