暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

PostgreSQL知识分享-第36期

原创 多米爸比 2024-03-23
245

本期分享如下:

  • 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。

最后修改时间:2024-04-14 23:33:09
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论