zoukankan      html  css  js  c++  java
  • PostgreSql的使用一

    DO $$
    DECLARE names CURSOR FOR 
        select tablename from pg_tables where schemaname='xxxx';
    BEGIN
       FOR stmt IN names LOOP
       EXECUTE 'truncate table  ' || quote_ident(stmt.tablename) || ' RESTART IDENTITY CASCADE'; 
    --  	 EXECUTE 'vacuum ' || quote_ident(stmt.tablename); 
       END LOOP;
    END; $$
    

    基本操作查看
    虽然在新版本的Postgresql中有自动的vacuum,但是如果是大批量的数据IO可能会导致自动执行很慢,需要配合手动执行以及自己的脚本来清理数据库。

    1. vacuumdb 是 SQL 命令 VACUUM的封装,所以用vacuumdb和vacuum来清理数据库都可以,效果是一样的。

    2. vacuumdb 中的几个重要参数:可以用vacuumdb --help查询。
      -a/--all vacuum所有的数据库
      -d dbname 只vacuum dbname这个数据库
      -f/--full 执行full的vacuum
      -t table 只vacuum table这个数据表
      -z/--analyze Calculate statistics for use by the optimizer

    3. 切换到postgres用户下:
      vacuumdb -d yourdbname -f -z -v 来清理你的数据库。
      或者加到conrtab中15 1 * * * postgres vacuumdb -d mydb -f -z -v >> /tmp/vacuumdb.log
      每天的一点一刻开始进行清理。

    4. 如何查询我的XID是否接近临界值的命令:
      select age(datfrozenxid) from pg_database;
      或者:select max(age(datfrozenxid)) from pg_database;

    5. 然而我们关心的是哪一个大的表组要真正的vacuum:
      SELECT relname, age(relfrozenxid) as xid_age, pg_size_pretty(pg_table_size(oid)) as table_size FROM pg_class WHERE relkind = 'r' and pg_table_size(oid) > 1073741824
      ORDER BY age(relfrozenxid) DESC LIMIT 20;
      这个命令是查询按照最老的XID排序,查看大于1G而且是排名前20的表。

  • 相关阅读:
    C#中的Json序列化
    c#在sqlserver中使用EF框架
    Mvc中模拟模型
    localdb启动
    List泛型用法(半转载半原创)
    C#中真正的属性
    委托的简介、使用和简单事件
    类嵌套_list泛型_餐馆点菜例
    JavaIO
    JavaIO
  • 原文地址:https://www.cnblogs.com/xx2017/p/15405751.html
Copyright © 2011-2022 走看看