PostgreSQL事务的操作命令
一、一般情况下,事务是自动提交的。参数autocommit控制事务是否自动提交。 postgres=#showautocommit; autocommit ------------ on
二、开启一个事务的命令有: http://www.postgresql.org/docs/9.4/static/sql-begin.html http://www.postgresql.org/docs/9.4/static/sql-start-transaction.html 1. BEGIN; 2. START TRANSACTION [ transaction_mode [,...] ] 这里的transaction_mode是下列之一: ISOLATIONLEVEL{SERIALIZABLE|REPEATABLEREAD|READCOMMITTED|READUNCOMMITTED} READWRITE|READONLY [NOT]DEFERRABLE postgres=#begin; BEGIN postgres=#starttransaction; STARTTRANSACTION 三、 设置事务的模式 http://www.postgresql.org/docs/9.1/static/sql-set-transaction.html SETTRANSACTIONtransaction_mode[,...] SETTRANSACTIONSNAPSHOTsnapshot_idSETSESSIONCHARACTERISTICSASTRANSACTIONtransaction_mode[,...] 这里的transaction_mode是下列之一: ISOLATIONLEVEL{SERIALIZABLE|REPEATABLEREAD|READCOMMITTED|READUNCOMMITTED} READWRITE|READONLY [NOT]DEFERRABLE 例如:用一个早已存在的事务的相同快照开始一个新的事务。 首先从现存事务中输出快照。 这将返回快照的标识符,例如: BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; --启动时设置事务的隔离级别;
然后在新打开的事务的开始的SET TRANSACTION SNAPSHOT命令中给出快照标识符: BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; --启动时设置事务的隔离级别; 四、结束事务的命令有: http://www.postgresql.org/docs/9.4/static/sql-commit.html http://www.postgresql.org/docs/9.4/static/sql-rollback.html
postgres=#commit; COMMIT postgres=#rollback; ROLLBACK 五、预备事务 创建预备事务,是为当前事务分阶段提交做准备的。 http://www.postgresql.org/docs/9.4/static/sql-prepare-transaction.html PREPARETRANSACTION'transaction_tag'; PREPARE TRANSACTION为当前事务的分阶段提交做准备。在命令之后, 事务就不再和当前会话关联了;它的状态完全保存在磁盘上,它提交成功有非常高的可能性, 即使是在请求提交之前数据库发生了崩溃也如此。 例如:把当前事务为阶段提交做准备,使用foobar做为事务标识符: PREPARETRANSACTION'foobar'; 提交预备事物,提交一个早先为分阶段提交的预备事务。
http://www.postgresql.org/docs/9.4/static/sql-commit-prepared.html
COMMITPREPAREDtransaction_id 注意:要提交一个预处理的事务,你必须是最初执行该事务的用户或超级用户。 不过你不必在同一个会话里执行该命令。 这条命令不能在事务块里执行。预处理的事务立即提交。 所有目前可用的预处理事务都在系统视图pg_prepared_xacts里列出。 例如:提交事务标识符foobar标识的事务: COMMITPREPARED'foobar'; 完整例子: 首先要启动prepare transaction,否则的话会报如下错误: postgres=#preparetransaction'dd'; ERROR:preparedtransactionsaredisabled 提示:Setmax_prepared_transactionstoanonzerovalue. postgres=#setmax_prepared_transactions=2; ERROR:parameter"max_prepared_transactions"cannotbechangedwithoutrestarti ngtheserver 要启动要启动prepare transaction,需要到postgresql.conf配置文件中,将参数max_prepare_transactions设置为非零的值,然后重启数据库服务即可。
postgres=#begintransaction; BEGIN postgres=#insertintojnkx.testvalues(2,'dd'); INSERT01 postgres=#preparetransaction'c'; PREPARETRANSACTION postgres=#select*fromjnkx.test; id|name ----+------ 1|dd postgres=#commitprepared'c'; COMMITPREPARED postgres=#select*fromjnkx.test; id|name ----+------ 1|dd 2|dd (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |