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

PostgreSQL问答-第20221230期

原创 Maleah 2022-12-30
532

2022年度最后一期 PostgreSQL 问答

目录

Q1. PG 中能修改字段类型么?

问题描述

PostgreSQL中想要修改表的字段类型,可以直接改么?有什么需要注意的么?

问题解答

可以修改,有一些注意事项:

  • 表和索引是否重写

    • 由小改大:表是不会重写的,索引不会发生重写。
      • 但是注意对于int4到int8这种转化,还是需要重写的,因为底层存储不一样。
      • 修改分区表索引列:子表不会重写,所有索引会重写
    • 由大改小:表需要重写,索引自然也需要重写。
  • 统计信息:

    修改列的类型,包括长度、类型,需要重新收集统计信息

可供参考的文章

https://mp.weixin.qq.com/s/g8gEDPIfF3kFDf_32CBEmg

https://mp.weixin.qq.com/s/BzLTJhD-o8wiWOzs_-TS-A

Q2. PostgreSQL 必须禁用ipv6吗?

问题描述

PostgreSQL 中“启用 ipv6,统计信息将无法正常工作”,这种说法是否正确么?

问题解答

不对,没有必须禁用一说

一般情况下如果不使用ipv6,我们推荐设置

listen_addresses = '0.0.0.0'

而不是设置为“*”,这样PG不会监听ipv6。

Q3. PostgreSQL 中如何创建一个uuid类型的列?

问题描述

PostgreSQL 中如何创建一个uuid作为索引或者uuid类型的列?

问题解答

PG里直接就有uuid这个类型,可以直接使用

postgres=# create table t_uuid(id uuid);
CREATE TABLE
postgres=# \d t_uuid
             Table "public.t_uuid"
 Column | Type | Collation | Nullable | Default 
--------+------+-----------+----------+---------
 id     | uuid |           |          | 

生成uuid函数,从PG13开始可以使用内置的gen_random_uuid()函数,以前的版本可以使用uuid-ossp扩展

postgres=# insert into t_uuid values(gen_random_uuid());
INSERT 0 1
postgres=# select * from t_uuid;
                  id                  
--------------------------------------
 f9e62887-c6ce-49c0-87e3-bd53d16e8b99
(1 row)

Q4. PostgreSQL 12对于逻辑复制有什么优化建议吗?

问题描述

PostgreSQL 12 版本关于逻辑复制的优化

问题解答
  • 方案一:如果cpu负载不高,可以考虑设置wal_compression

    WAL的全页写(Full Page Write)发生于检查点完成之后的第一次修改中,通过设置wal_compression为on后,PostgreSQL将采用内置的pglz算法压缩全页写再写入WAL。

    详情指路👉:https://www.modb.pro/db/593386

  • 方案二:建议升级到14。
    PostgreSQL14做了大量性能优化:流式处理大事务、分区表优化、二进制格式传输、大表初始同步优化,还有一些功能和监控视图改进

Q5. PostgreSQL中如何查找所有包含bigint类型字段的表

问题描述

PostgreSQL 中如何查找所有包含bigint类型字段的表,想批量把包含bigint类型字段的表都改成numeric的,只要所有业务用户的表

问题解答

相关表:pg_attribute、pg_class

select pc.relnamespace::regnamespace,pa.attrelid::regclass, pa.attname 
 from pg_attribute pa 
 join pg_class pc 
   on pa.attrelid=pc.oid 
where atttypid = 'bigint'::regtype
  and pc.relkind=any(array['r','p','m'])
  and pc.relnamespace!=to_regnamespace('pg_catalog');

例:

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

文章被以下合辑收录

评论