PostgreSQL有一种介于正常表和临时表之间的类型表,称之为unlogged表,在该表新建的索引也属于unlogged,该表在写入数据时候并不将数据写入到持久的write-ahead log文件中,在数据库异常关机或者异常崩溃后该表的数据会被truncate掉,但是在写入性能上会比正常表快几倍。

分别测试正常表和unlogged表数据插入速度区别

uber_geocoder=# \dt+
List of relations
Schema | Name | Type | Owner | Size | Description
--------------------------+------------------------+-------+----------+--------+-------------
uber_geocoder_tw_15q3_v2 | compiling_info | table | postgres | 16 kB |
uber_geocoder_tw_15q3_v2 | data_process_reports | table | postgres | 16 kB |
uber_geocoder_tw_15q3_v2 | info | table | postgres | 16 kB |
uber_geocoder_tw_15q3_v2 | twn_addr_compact | table | postgres | 774 MB |
(4 rows) uber_geocoder=# \timing
Timing is on.
uber_geocoder=# create table twn_addr_compact_loggod as select * from twn_addr_compact ;
SELECT 258902
Time: 977250.581 ms

可以看到在新建正常表并插770M的数据的情况下耗时近16分钟

新建一张unlogged表并插入770M数据进行测试

uber_geocoder=# create unlogged table twn_addr_compact_unloggod as select * from twn_addr_compact ;
SELECT 258902
Time: 300683.321 ms

可以看到在同等条件下unlogged表的插入速度为5分钟,性能提高了三倍。

感兴趣的可以将postgres进程kill掉,然后再启动数据库,就会发现我们刚才创建的unlogged表数据丢失。

如何查看当前数据库中所有的unlogged表

uber_geocoder=# select n.nspname as schema_name,c.relname as table_name from pg_catalog.pg_namespace n, pg_catalog.pg_class c where c.relnamespace=n.oid and n.nspname != 'pg_toast' and c.relkind='r' and c.relpersistence = 'u';
schema_name | table_name
--------------------------+---------------------------
edbstore | emp
uber_geocoder_tw_15q3_v2 | twn_addr_compact_unloggod
(2 rows)

如果需要批量将unlogged表修改为正常的表,则执行如下

uber_geocoder=# select 'ALTER TABLE'||' '||concat(n.nspname,'.' ,c.relname)||' '||'SET LOGGED ;' AS convert_logged_sql from pg_catalog.pg_namespace n, pg_catalog.pg_class c where c.relnamespace=n.oid and n.nspname != 'pg_toast' and c.relkind='r' and c.relpersistence = 'u';
convert_logged_sql
-----------------------------------------------------------------------------
ALTER TABLE edbstore.emp SET LOGGED ;
ALTER TABLE uber_geocoder_tw_15q3_v2.twn_addr_compact_unloggod SET LOGGED ;
(2 rows)
select n.nspname ||'.'|| c.relname as table_name, pg_table_size(n.nspname ||'.'|| c.relname) as table_size from pg_catalog.pg_namespace n, pg_catalog.pg_class c where c.relnamespace=n.oid and n.nspname != 'pg_toast' and c.relkind='r' and c.relpersistence = 'u' order by table_size desc;

PostgreSQL unlogged表的更多相关文章

  1. Postgresql两表联结更新

    Postgresql两表联合更新近日使用Postgresql感到有点不好用,一个联合更新非要这样写语法才对:update d_routetripset name=b.name ,    descrip ...

  2. mybatis使用注解往postgresql数据库表insert数据[主键自增]的写法

    建表SQL: DROP TABLE IF EXISTS person; CREATE TABLE person( person_id serial PRIMARY KEY NOT NULL, pers ...

  3. PostgreSQL删除表

    PostgreSQL的DROP TABLE语句是用来删除表定义及其所有相关的数据表的索引,规则,触发器和约束. 必须使用此命令时要小心,因为一旦一个表被删除表中提供的所有信息也将被永远失去了. 语法: ...

  4. postgresql逻辑结构--表(二)

    一.创建表 语法: create table table_name( col01_name data_type, col02_name data_type, col03_name data_type, ...

  5. POSTGRESQL 创建表结构、修改字段、导入导出数据库(支持CSV)

    这两个月经常使用postgresql,总结一些经常使用的语句: --创建表 CREATE TABLE customers ( customerid SERIAL primary key , compa ...

  6. PostgreSQL的表空间

    1. 表空间的概念 PostgreSQL中的表空间允许在文件系统中定义用来存放表示数据库对象的文件的位置.在PostgreSQL中表空间实际上就是给表指定一个存储目录. 2. 表空间的作用 官方解释 ...

  7. PostgreSQL数据库表名的大小写实验

    磨砺技术珠矶,践行数据之道,追求卓越价值回到上一级页面:PostgreSQL基础知识与基本操作索引页    回到顶级页面:PostgreSQL索引页[作者 高健@博客园  luckyjackgao@g ...

  8. sql:sql server,MySQL,PostgreSQL的表,视图,存储过程结构查询

    sql server 2005: --SQL SERVER 2005 生成代码需要知道的SQL语句 use LibrarySystem --查询当前数据库所有表和其的主键字段,字段类型,长度,是否为空 ...

  9. Solr 4.4.0利用dataimporthandler导入postgresql数据库表

    将数据库edbstore的edbtore schema下的customers表导入到solr 1. 首先查看customers表字段信息 edbstore=> \d customers Tabl ...

随机推荐

  1. DataGrid控件的列

    四种列(局限性较大)https://www.cnblogs.com/lonelyxmas/p/9442604.html 更强大的模板列(如控件居中等)https://www.cnblogs.com/l ...

  2. java输出乱码专题

    https://blog.csdn.net/liaoYu1887/article/details/82714727(其他) @Controller public class ItemCatContro ...

  3. carographer流程

    node_main.cc  93   Run启动              58   Node初始化              64   node.StartTrajectoryWithDefault ...

  4. easyui编辑editor

    $.extend($.fn.datagrid.defaults.editors, { textarea: { init: function(container, options){ var input ...

  5. layui template list

    //第一步:编写模版.你可以使用一个script标签存放模板,如: <script id="demo" type="text/html"> < ...

  6. Ubuntu下qt5使用vlc

      一:Ubuntu下在线安装qt5,同时安装了qt creator 二:打开终端执行sudo apt-get install libvlc5 libvlc-dev libvlccore-dev 安装 ...

  7. liunx服务器在本地可以访问但是外网访问不了

    版权声明:本文为CSDN博主「tlytg456」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/tlytg/ar ...

  8. webrtc实现点对点视频通讯

    html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  9. BaseDao+万能方法 , HibernateDaoSupport

    package dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStat ...

  10. convert.ToInt32和int.parse区别

    前者适合将object类类型转换成int类型 int.Parse适合将string类类型转换成int类型 1)这两个方法的最大不同是它们对null值的处理方法:Convert.ToInt32(null ...