postgres

Postgres的TOAST技术

二次信任 提交于 2020-04-15 10:51:57
【推荐阅读】微服务还能火多久?>>> 一、介绍 首先,Toast是一个名字缩写,全写是The OverSized Attribute Storage Technique,即超尺寸字段存储技术,顾名思义,是说超长字段在Postgres的一个存储方式。Postgres采用的存储默认是每个页面存储固定8Kb大小的数据,并且元组不允许跨页面存储,所以并不能直接存储大字段数据。Toast就是为此应运而生,它会将大字段值压缩或者分散为多个物理行来存储。对于用户来说完全不用关注这一技术实现,完全是透明的。 二、TOAST的存储方式 Postgres的部分类型数据支持toast,不是全部类型是因为有些字段类型是不会产生大字段数据的,完全没必要用到Toast技术(比如date,time,boolean等)。支持Toast的数据类型应当时变长的(variable-length),变长字段最多可选择32bit的列头(header),Toast占用两个变长的bit位来作为FLAG,故Toast的逻辑尺寸限制是(2^30-1)~1GB,当两个bit都是0是,这个数据类型的值就是非Toast的(untoasted)。当表中字段任何一个有Toast,那这个表都会有这一个相关联的Toast表,OID被存储在pg_class.reltoastrelid里面。超出的的数值将会被分割成chunks,并最多toast

postgresql常用命令(持续更新中...)

徘徊边缘 提交于 2020-03-02 03:36:53
查看表结构 psql里 查看所有库:\l 查看所有表: \dt 查看某个表的结构: \d 表名 对应的MySQL命令: 查看有那些库可以:show databases ---postgreSQL是什么呢? show tables ---->postgreSQL是什么? 还有怎么查看表结构呢? ------------------------------------------------------------------------------------------------ 自增字段: 查看自增字段的当前值: select currval(pg_get_serial_sequence('table_name','column_name')); 获取自增字段的下一个值: select nextval(pg_get_serial_sequence('table_name','column_name')); 设置自增字段的值: setval(pg_get_serial_sequence('table_name', 'column_name'),9); 或者select setval(pg_get_serial_sequence('table_name', 'column_name'),9);#select可以直接查看设置后的值 自动设置为当前列里面最大值的下一个值: select

PostgreSQL no space left on device

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-28 11:46:27
一个同事说一台测试机程序连接不上,貌似抛出了个DB问题, 显示如下: PSQLException: ERROR: could not write block xxxx of temporary file: No space left on device Caused by: org.postgresql.util.PSQLException: ERROR: could not write block 31840050 of temporary file: No space left on device at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java

Ubuntu下PostgreSQL数据库集群(PL/Proxy)配置方法

本小妞迷上赌 提交于 2019-12-09 18:41:37
数据库集群: N 个数据库堆到一起,找一个当个头头,管理所有的数据库并让它们协同工作。当然了,要不要找个头头,找几个头头,如何协作等等问题这些都可以商量和约定,因此,也就形成了不同的数据库集群。 如果数据库系统是 PostgreSQL ,这个集群就是 PostgreSQL 数据库集群。 PostgreSQL 数据库管理集群的方法有很多,有人提出了 PL/Proxy 方式的集群(这才是本文的重点)。这个 PL/Proxy 方式的集群是这样的:有很多安装了 PostgreSQl 数据库的计算机,有台计算机是头头,我们把这个头头叫做 proxy ,其他的叫做 database0 , database1 ……。 以三台机器的集群为例子,看看 PostgreSQL 集群的架构是什么。 proxy 节点: proxy 节点实际上也是一个 PostgreSQL 数据库 节点,但是所有数据均不存放到 proxy 节点上,主要做三件事情: 1. 接受用户的 sql 查询; 2. 分析用户的 sql 查询并转换成集群上执行的 SQL 语句; 3. 合并集群执行 sql 的结果,然后返回给用户。 说白了,就是把用户的 sql 语句交给 database0 , database1 去执行,然后合并执行结果返回给用户。 database1 节点和 database2 节点: 就是普通的数据库节点,接收

postgres 数据备份与恢复

我怕爱的太早我们不能终老 提交于 2019-12-05 03:32:52
PostgreSQL自带一个客户端pgAdmin,里面有个备份,恢复选项,也能对数据库进行备份 恢复(还原),但最近发现数据库慢慢庞大的时候,经常出错,备份的文件过程中出错的几率那是相当大,手动调节灰常有限。所以一直寻找完美的备份恢复方案。 梦里寻他千百度,伊人却在灯火阑珊处...其实PostgreSQL内置不少的工具,寻找的备份恢复方案就在其中:pg_dump,psql。这两个指令在数据库的安装目录下,比如我自己本地安装的,路径形如:C:\Program Files\PostgreSQL\9.0\;然后进入到bin文件夹,会看到不少的exe文件,这就是PostgreSQL内置的工具了。里面会找到pg_dump.exe,psql.exe两个文件。我们怎么用他们? 用法: 备份数据库,指令如下: pg_dump -h 164.82.233.54 -U postgres databasename > C:\databasename.bak 开始-运行-cmd 弹出dos控制台;然后 在控制台里,进入PostgreSQL安装目录bin下: cd C:\Program Files\PostgreSQL\9.0\bin 最后执行备份指令: pg_dump -h 164.82.233.54 -U postgres databasename > C:\databasename.bak 指令解释