Can rename table but can not truncate table

Posted yxysuanfa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Can rename table but can not truncate table相关的知识,希望对你有一定的参考价值。

一个表无法truncate可是能够rename,这个乍听起来认为好奇怪,以下模拟该过程。
3个session:
session1运行truncate和rename操作。
session2运行lock表操作;
session3进行监控。
 
session1:
[[email protected] contrib]$ psql gtlions
psql (8.2.15)
Type "help" for help.
 
gtlions=# \d test
             Table "public.test"
 Column |          Type          | Modifiers 
--------+------------------------+-----------
 id     | integer                | 
 name   | character varying(200) | 
Indexes:
    "idxtestid" btree (id)
    "idxtestname" btree (name)
Distributed by: (id)
 
gtlions=# select pg_backend_pid();
 pg_backend_pid 
----------------
           1473
(1 row)
 
gtlions=# truncate table test;
Cancel request sent
ERROR:  relation "test" does not exist
gtlions=# alter table test rename to test1;
ALTER TABLE


 
session2:
[[email protected] ~]$ psql gtlions
psql (8.2.15)
Type "help" for help.
 
gtlions=# select pg_backend_pid();
 pg_backend_pid 
----------------
           1555
(1 row)
 
gtlions=# begin;
BEGIN
gtlions=# select * from test limit 10;
  id   |    name    
-------+------------
 19672 | 19672-asfd
 19674 | 19674-asfd
 19676 | 19676-asfd
 19678 | 19678-asfd
 19680 | 19680-asfd
 19682 | 19682-asfd
 19684 | 19684-asfd
 19686 | 19686-asfd
 19688 | 19688-asfd
 19690 | 19690-asfd
(10 rows)
 
gtlions=# end;
COMMIT


 
session3:
[[email protected] ~]$ psql gtlions
psql (8.2.15)
Type "help" for help.
 
gtlions=# select locktype,relation::regclass,pid,mode,granted,gp_segment_id from pg_locks where pid in (1473,1555) order by pid;
 locktype | relation | pid | mode | granted | gp_segment_id 
----------+----------+-----+------+---------+---------------
(0 rows)
 
gtlions=# select locktype,relation::regclass,pid,mode,granted,gp_segment_id from pg_locks where pid in (1473,1555) order by pid;
   locktype    |  relation   | pid  |      mode       | granted | gp_segment_id 
---------------+-------------+------+-----------------+---------+---------------
 relation      | test        | 1555 | AccessShareLock | t       |            -1
 relation      | idxtestname | 1555 | AccessShareLock | t       |            -1
 transactionid |             | 1555 | ExclusiveLock   | t       |            -1
 relation      | idxtestid   | 1555 | AccessShareLock | t       |            -1
(4 rows)
 
gtlions=# select locktype,relation::regclass,pid,mode,granted,gp_segment_id from pg_locks where pid in (1473,1555) order by pid;
   locktype    |  relation   | pid  |        mode         | granted | gp_segment_id 
---------------+-------------+------+---------------------+---------+---------------
 transactionid |             | 1473 | ExclusiveLock       | t       |            -1
 relation      | test        | 1473 | AccessExclusiveLock | f       |            -1
 transactionid |             | 1555 | ExclusiveLock       | t       |            -1
 relation      | idxtestid   | 1555 | AccessShareLock     | t       |            -1
 relation      | idxtestname | 1555 | AccessShareLock     | t       |            -1
 relation      | test        | 1555 | AccessShareLock     | t       |            -1
(6 rows)


 
-EOF-

以上是关于Can rename table but can not truncate table的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio更改工程名异常解决方案 :can't rename root module

Constraint where both columns cannot be null, but one can

mkvirtualenv Command ‘‘ not found, but can be installed with

Command ‘yum‘ not found, but can be installed with: apt install yum

#yyds干货盘点# 解决:Command ‘mongo‘ not found, but can be installed with

解决:Command ‘mongo‘ not found, but can be installed with