PostgreSQL知识分享-第36期

本期分享如下:

  • ACL默认显示问题
  • 关于发布的两个小知识
  • Drop Table后空间未释放
  • DBeaver阻止并行
  • 映射bit类型

一、ACL(Access Control List)在psql显示问题

为什么表查看ACL时为空呢?

image.png

这个并不奇怪,当没有做任何显式权限分配时,ACL为空是正常的,此时并不会显示owner的权限信息,因为owner比较特殊。

当我们使用grant分配权限之后,就可以查看完整的ACL信息,此时会暴露出owner的权限信息。

image.png

对象的owner的权限信息默认不会展示,首次使用grant语句分配触发后即可暴露。

二、逻辑复制关于发布的两个小知识

参考链接:https://www.modb.pro/db/1764583511357460480

  • 作为发布的无主键表做update和delete会报错,解决办法:创建主键/非空唯一索引,并指定唯一索引为复制标识或指定全列为复制标识
  • 当发布所有表时,新创建的表会自动被认为是需要发布的表,可通过pg_publication_tables视图查看

三、Drop Table后磁盘空间未及时释放

参考链接:https://www.modb.pro/db/1767100886471512064

使用12.3版本的时候遇到一个问题,会话1查询了一个大于1G的表之后未做其他操作且会话一直保持,会话2执行drop table后,磁盘空间一直未释放,直到会话1再执行其他操作或者结束会话,磁盘才会释放空间。

在12.6的官网发布说明中有该问题的相关描述:

Ensure that disk space allocated for a dropped relation is released promptly at commit (Thomas Munro)
Previously, if the dropped relation spanned multiple 1GB segments, only the first segment was truncated immediately. Other segments were simply unlinked, which doesn’t authorize the kernel to release the storage so long as any other backends still have the files open.

如果更老的版本,需要注意该问题。

四、DBeaver客户端为什么阻止查询使用并行

参考链接:https://mp.weixin.qq.com/s/RbgJRWFUtoeDbG5yUflVdQ

DBeaver客户端使用JDBC协议来访问数据库,连接上默认使用setMaxRows()方法来限制结果集的大小为200,如下图所示:可以将该限制设置为0来启用并行。

image.png

五、Java如何映射bit数据类型

使用bit比特类型时,Java里最合适的映射类型是String,如果是bit(1)一个比特位,也可以使用boolean类型。下面的示例演示使用String及int类型来映射bit(3)。

首先进行表结构创建及数据插入

postgres=>  create table tab_bit(bt bit(3));
CREATE TABLE
postgres=> insert into tab_bit values(B'001'),(B'010'),(B'100');
INSERT 0 3

使用String类型接收:

image.png

使用int类型接收:

image.png

从测试结果看,使用int并不合适,会直接将比特串强转为int。

关联推荐

如果有任何问题需要讨论交流的朋友,欢迎添加本人微信号skypkmoon。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值