ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 删除Postgres某个表文件

删除Postgres某个表文件

原创 Linux操作系统 作者:jolly_liu 时间:2010-08-27 14:46:19 0 删除 编辑

Postgres中,如果某个表的大小超过1G就会自动地被分成多个子文件,以XX.1,XX.2....命名。

 

如果我们删除了一个表的子文件,情况会怎样呢?

 

测试过程:

pgbench_accounts对于的文件编号是2950729507.1Ok,现在将29507.1 move到上级目录上(相当于删除)

 

[root@localhost 29494]# ls
112        11492_fsm  14270  14369     2607_vm   2619      2674      2755      2936_vm    3601_vm
113        11492_vm   14272  14370     2608      2619_fsm  2675      2756      2937       3602
11467      11494      14274  174       2608_fsm  2619_vm   2678      2757      29495      3602_fsm
11467_fsm  11496      14275  175       2608_vm   2620      2679      2830      29495_fsm  3602_vm
11467_vm   11497      14277  2328      2609      2620_fsm  2680      2831      29495_vm   3603
11469      11499      14279  2328_fsm  2609_fsm  2620_vm   2681      2832      29498      3603_fsm
11471      11501      14281  2328_vm   2609_vm   2650      2682      2833      29498_fsm  3603_vm
11472      11760      14282  2600      2610      2651      2683      2834      29498_vm   3604
11472_fsm  11760_fsm  14284  2600_fsm  2610_fsm  2652      2684      2835     
29507      3605
11472_vm   11760_vm   14286  2600_vm   2610_vm   2653      2685      2836     
29507.1    3606
11474      11785      14288  2601      2611      2654      2686      2836_fsm  29507_fsm  3607
11476      11785_fsm  14289  2601_fsm  2612      2655      2687      2836_vm   29507_vm   3608
11477      11785_vm   14291  2601_vm   2612_fsm  2656      2688      2837      29508      3609
11477_fsm  1247       14293  2602      2612_vm   2657      2689      2838      29510      3712
11477_vm   1247_fsm   14295  2602_fsm  2613      2658      2690      2838_fsm  29512      3764
11479      1247_vm    14296  2602_vm   2614      2659      2691      2838_vm   29516      3764_fsm
11481      1249       14298  2603      2615      2660      2692      2839      29516_fsm  3764_vm
11482      1249_fsm   14300  2603_fsm  2615_fsm  2661      2693      2840      2966       3766
11482_fsm  1249_vm    14302  2603_vm   2615_vm   2662      2696      2840_fsm  3008       3767
11482_vm   1255       14304  2604      2616      2663      2699      2840_vm   3009       5000
11484      1255_fsm   14306  2605      2616_fsm  2664      2701      2841      3501       5001
11486      1255_vm    14308  2605_fsm  2616_vm   2665      2702      2893      3502       5002
11487      1259       14310  2605_vm   2617      2666      2703      2893_fsm  3503       548
11487_fsm  1259_fsm   14312  2606      2617_fsm  2667      2704      2893_vm   3600       549
11487_vm   1259_vm    14314  2606_fsm  2617_vm   2668      2753      2903      3600_fsm   pg_internal.init
11489      1417       14316  2606_vm   2618      2669      2753_fsm  2904      3600_vm    PG_VERSION
11491      1418       14364  2607      2618_fsm  2670      2753_vm   2936      3601
11492      14268      14367  2607_fsm  2618_vm   2673      2754      2936_fsm  3601_fsm

 

[root@localhost 29494]# mv 29507.1 ../
[root@localhost 29494]# ls
112        11492_fsm  14270  14369     2607_vm   2619      2674      2755      2936_vm    3602
113        11492_vm   14272  14370     2608      2619_fsm  2675      2756      2937       3602_fsm
11467      11494      14274  174       2608_fsm  2619_vm   2678      2757      29495      3602_vm
11467_fsm  11496      14275  175       2608_vm   2620      2679      2830      29495_fsm  3603
11467_vm   11497      14277  2328      2609      2620_fsm  2680      2831      29495_vm   3603_fsm
11469      11499      14279  2328_fsm  2609_fsm  2620_vm   2681      2832      29498      3603_vm
11471      11501      14281  2328_vm   2609_vm   2650      2682      2833      29498_fsm  3604
11472      11760      14282  2600      2610      2651      2683      2834      29498_vm   3605
11472_fsm  11760_fsm  14284  2600_fsm  2610_fsm  2652      2684      2835      29507      3606
11472_vm   11760_vm   14286  2600_vm   2610_vm   2653      2685      2836      29507_fsm  3607
11474      11785      14288  2601      2611      2654      2686      2836_fsm  29507_vm   3608
11476      11785_fsm  14289  2601_fsm  2612      2655      2687      2836_vm   29508      3609
11477      11785_vm   14291  2601_vm   2612_fsm  2656      2688      2837      29510      3712
11477_fsm  1247       14293  2602      2612_vm   2657      2689      2838      29512      3764
11477_vm   1247_fsm   14295  2602_fsm  2613      2658      2690      2838_fsm  29516      3764_fsm
11479      1247_vm    14296  2602_vm   2614      2659      2691      2838_vm   29516_fsm  3764_vm
11481      1249       14298  2603      2615      2660      2692      2839      2966       3766
11482      1249_fsm   14300  2603_fsm  2615_fsm  2661      2693      2840      3008       3767
11482_fsm  1249_vm    14302  2603_vm   2615_vm   2662      2696      2840_fsm  3009       5000
11482_vm   1255       14304  2604      2616      2663      2699      2840_vm   3501       5001
11484      1255_fsm   14306  2605      2616_fsm  2664      2701      2841      3502       5002
11486      1255_vm    14308  2605_fsm  2616_vm   2665      2702      2893      3503       548
11487      1259       14310  2605_vm   2617      2666      2703      2893_fsm  3600       549
11487_fsm  1259_fsm   14312  2606      2617_fsm  2667      2704      2893_vm   3600_fsm   pg_internal.init
11487_vm   1259_vm    14314  2606_fsm  2617_vm   2668      2753      2903      3600_vm    PG_VERSION
11489      1417       14316  2606_vm   2618      2669      2753_fsm  2904      3601
11491      1418       14364  2607      2618_fsm  2670      2753_vm   2936      3601_fsm
11492      14268      14367  2607_fsm  2618_vm   2673      2754      2936_fsm  3601_vm

 

[root@localhost bin]# su - enterprisedb
-bash-3.2$ cd bin/
-bash-3.2$ ./psql benchdb
psql (8.4.4.10)
Type "help" for help.

 

benchdb=# analyze;  
ANALYZE

 

benchdb=# select * from pgbench_accounts order by aid limit 7;
 aid | bid | abalance |                                        filler                                       
-----+-----+----------+--------------------------------------------------------------------------------------
   1 |   1 |        0 |                                                                                    
   2 |   1 |        0 |                                                                                    
   3 |   1 |        0 |                                                                                    
   4 |   1 |        0 |                                                                                    
   5 |   1 |        0 |                                                                                    
   6 |   1 |        0 |                                                                                    
   7 |   1 |        0 |                                                                                    
(7 rows)

benchdb=# select * from pgbench_accounts order by aid desc limit 7;
错误无法读取关系base/29494/29507的块158730:只读取了8192字节的0

benchdb=# vacuum;
VACUUM

 

[root@localhost 29494]# ll 29507*
-rw------- 1 enterprisedb enterprisedb 1073741824 Aug 27 13:28 29507
-rw------- 1 enterprisedb enterprisedb         
0 Aug 27 13:19 29507.1
-rw------- 1 enterprisedb enterprisedb     344064 Aug 27 13:28 29507_fsm
-rw------- 1 enterprisedb enterprisedb      24576 Aug 27 13:28 29507_vm

 

 

结论:

从上面的测试中看到,虽然删除了表的某个子文件,我们仍能够正常地进行vacuumanalyze,访问部分数据,并且也可以正常启动/关闭数据库。

 

 Postgresql基于这样的设计有什么好处和坏处呢?

 

·好处:

如果真出现了如上某些文件误删除的情况,不会影响对数据库其他表的正常访问,数据库不会因此而宕下来。从可用性来说,可以说他提供了更好的高可用性

 

·坏处:

我们只有访问到这部分丢失的文件相关的数据才能发现此问题,DBA不能提前知道,早早采取措施。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21778816/viewspace-671997/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 逻辑结构
请登录后发表评论 登录
全部评论

注册时间:2010-04-08

  • 博文量
    5
  • 访问量
    9246