网站的建设与维护实践报告创客网站建设
news/
2025/10/7 20:27:53/
文章来源:
网站的建设与维护实践报告,创客网站建设,常州微网站,如何创建一个和淘宝一样的网站Postgresql的事务里面ddl可以回滚,这点和oracle不太一样。其中postgresql alter table事务操作中#xff0c;包括回滚的整个过程中表对象的relfilenode不变#xff0c;但是postgresql truncate事务操作中#xff0c;一旦执行truncate操作表对象的relfilenode在当前会话就变了…Postgresql的事务里面ddl可以回滚,这点和oracle不太一样。其中postgresql alter table事务操作中包括回滚的整个过程中表对象的relfilenode不变但是postgresql truncate事务操作中一旦执行truncate操作表对象的relfilenode在当前会话就变了其他会话查询表对象的relfilenode没有变化truncate事务操作回滚后表对象的relfilenode在当前会话中也回滚了
Postgresql的事务里面ddl可以回滚如下新增字段操作的ddl回滚后新增的字段就消失了
postgres# select * from emp;id | name | position | managerid | yearmomthday | salary | ticheng | salper
--------------------------------------------------------------------------7369 | SMITH | CLERK | 7902 | 1982-12-17 | 800 | | 207499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600 | 300 | 207521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250 | 500 | 307566 | JONES | MANAGER | 7389 | 1981-04-02 | 2975 | | 207654 | MARTIN | SALESMAN | 7698 | 1982-09-28 | 1250 | 1400 | 30
(5 rows)postgres# select oid,relname,relfilenode from pg_class where relnameemp;oid | relname | relfilenode
-----------------------------16412 | emp | 16412
(1 row)postgres# begin;
BEGIN
postgres# alter table emp add column lx varchar(100) default good;
ALTER TABLE
postgres# select oid,relname,relfilenode from pg_class where relnameemp;oid | relname | relfilenode
-----------------------------16412 | emp | 16412
(1 row)postgres# select * from emp;id | name | position | managerid | yearmomthday | salary | ticheng | salper | lx
--------------------------------------------------------------------------------7369 | SMITH | CLERK | 7902 | 1982-12-17 | 800 | | 20 | good7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600 | 300 | 20 | good7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250 | 500 | 30 | good7566 | JONES | MANAGER | 7389 | 1981-04-02 | 2975 | | 20 | good7654 | MARTIN | SALESMAN | 7698 | 1982-09-28 | 1250 | 1400 | 30 | good
(5 rows)postgres# rollback;
ROLLBACK
postgres# select oid,relname,relfilenode from pg_class where relnameemp;oid | relname | relfilenode
-----------------------------16412 | emp | 16412
(1 row)postgres# select * from emp;id | name | position | managerid | yearmomthday | salary | ticheng | salper
--------------------------------------------------------------------------7369 | SMITH | CLERK | 7902 | 1982-12-17 | 800 | | 207499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600 | 300 | 207521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250 | 500 | 307566 | JONES | MANAGER | 7389 | 1981-04-02 | 2975 | | 207654 | MARTIN | SALESMAN | 7698 | 1982-09-28 | 1250 | 1400 | 30
(5 rows)Postgresql的事务里面ddl可以回滚,如下truncate操作回滚后truncate的数据又回来了
testdb# select * from emp;id | name | position | managerid | yearmomthday | salary | ticheng | salper
--------------------------------------------------------------------------7369 | SMITH | CLERK | 7902 | 1982-12-17 | 800 | | 207499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600 | 300 | 207521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250 | 500 | 307566 | JONES | MANAGER | 7389 | 1981-04-02 | 2975 | | 207654 | MARTIN | SALESMAN | 7698 | 1982-09-28 | 1250 | 1400 | 30
(5 rows)testdb# select oid,relname,relfilenode from pg_class where relnameemp;oid | relname | relfilenode
-----------------------------16400 | emp | 16400
(1 row)testdb# begin;
BEGIN
testdb# truncate table emp;
TRUNCATE TABLE
testdb# select * from emp;id | name | position | managerid | yearmomthday | salary | ticheng | salper
----------------------------------------------------------------------
(0 rows)testdb# select oid,relname,relfilenode from pg_class where relnameemp;oid | relname | relfilenode
-----------------------------16400 | emp | 24610
(1 row)testdb# rollback;
ROLLBACK
testdb# select oid,relname,relfilenode from pg_class where relnameemp;oid | relname | relfilenode
-----------------------------16400 | emp | 16400
(1 row)testdb# select * from emp;id | name | position | managerid | yearmomthday | salary | ticheng | salper
--------------------------------------------------------------------------7369 | SMITH | CLERK | 7902 | 1982-12-17 | 800 | | 207499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600 | 300 | 207521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250 | 500 | 307566 | JONES | MANAGER | 7389 | 1981-04-02 | 2975 | | 207654 | MARTIN | SALESMAN | 7698 | 1982-09-28 | 1250 | 1400 | 30
(5 rows)truncate会话执行过程中ll -rt |grep 24610能查到relfilenode 24610
[rootcentos7 16386]# ll -rt |grep 24610
-rw-------. 1 postgres postgres 0 Oct 29 20:55 24610不过会话退出后不久ll -rt |grep 24610就查不到对应的文件了
[rootcentos7 16386]# ll -rt |grep 24610
[rootcentos7 16386]# 在会话1执行truncate的过程中只要还没提交其他会话查询到表的relfilenode不变
postgres# select oid,relname,relfilenode from pg_class where relnameemp;oid | relname | relfilenode
-----------------------------16412 | emp | 16412
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/930805.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!