作者:bytehouseOracle ACE、PostgreSQL ACE
10+年数据库架构与运维实战经验
公众号:bytehouse
墨天轮专栏:bytehouse
CSDN:Young DBA
摘要:针对 Every Day of a DBA,第132期: 新增 pg_get***ddl 系列函数并优化。今天有时间编译了测试环境,针对下面几个新特性进行了测试。后续将延续这个话题,测试反馈更多的特性给你大家。
pg_get_database_ddlselect pg_get_database_ddl(oid)asdatabasefrom pg_database where datname=current_database(); database
--------------------------------------------------------------------------------------------------------------------
CREATE DATABASE bigdata WITH TEMPLATE = template0 ENCODING = 'UTF8' LOCALE_PROVIDER = libc LOCALE = 'en_US.UTF-8';
ALTER DATABASE bigdata OWNER TO postgres;
(2 rows)内置函数可一键输出数据库完整创建+赋权DDL语句,便于数据库元数据备份、迁移。
表空间对应本地目录需提前创建,目录属主/权限为 postgres 用户读写权限。
CREATETABLESPACE ts_hot LOCATION '/opt/postgresql-19beta1/data/ts_hot';WARNING: tablespace location should not be inside the data directory
CREATE TABLESPACE警告说明:表空间路径不建议放置在PG主数据目录内,规范部署应独立磁盘目录。
select*from pg_tablespace ;结果:
oid | spcname | spcowner | spcacl | spcoptions
-------+------------+----------+--------+------------
1663 | pg_default | 10 | |
1664 | pg_global | 10 | |
16457 | ts_hot | 10 | |
(3 rows)CREATETABLESPACE ts_cold
LOCATION '/opt/postgresql-19beta1/data/ts_cold' -- 原测试笔误ts_hot,已修正
WITH(
io_min_workers =2,
io_max_workers =8
);参数释义:
io_min_workers:AIO最小工作线程io_max_workers:AIO最大工作线程-- 修改最大AIO线程
ALTERTABLESPACE ts_cold SET(io_max_workers =12);
-- 重载配置生效
SELECT pg_reload_conf();pg_get_tablespace_ddl 导出表空间完整DDLselect pg_get_tablespace_ddl(16457);
-- 或按表空间名称过滤
SELECT pg_get_tablespace_ddl(oid)FROM pg_tablespace WHERE spcname ='ts_cold'; pg_get_tablespace_ddl
-----------------------------------------------------------------------------------------
CREATE TABLESPACE ts_hot OWNER postgres LOCATION '/opt/postgresql-19beta1/data/ts_hot';
(1 row)ALTERTABLE big_table REPACK TABLESPACE ts_hot;无需第三方pg_repack插件,内核原生支持在线表空间迁移。
ALTERTABLE range_t SPLIT PARTITION p1 AT(1000)
INTO(PARTITION p1_1 TABLESPACE ts_hot,PARTITION p1_2 TABLESPACE ts_cold);支持拆分分区时分别指定冷热存储介质表空间,分层存储。
pg_get_role_ddlselect pg_get_role_ddl(16458); pg_get_role_ddl
--------------------------------------------------------------------------------------------------
CREATE ROLE admin NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB NOLOGIN NOREPLICATION NOBYPASSRLS;
(1 row)一键导出角色完整创建语句,包含所有权限开关,用于账号元数据备份、环境同步。
pg_get_publication_tablesSELECT
p.pubid,
p.relid,
nsp.nspnameAS schemaname,
cls.relnameAS tablename
FROM pg_get_publication_tables('pub_all') p
JOIN pg_class cls ON p.relid= cls.oid
JOIN pg_namespace nsp ON cls.relnamespace= nsp.oid; pubid | relid | schemaname | tablename
-------+-------+------------+-----------
16471 | 16414 | public | users
16471 | 16422 | public | follow
16471 | 16459 | public | test_log
16471 | 16462 | public | tmp_table
16471 | 16465 | public | biz_data
(5 rows)通过内置函数快速获取指定publication下所有同步表,关联系统表带出库名、表名,用于CDC链路元数据巡检。
io_min_workers / io_max_workers