华为云用户手册

  • 基本使用 场景一: 在一个实例里,存在多个数据库,不同数据库承载不同的业务,有些操作需要在多个数据库中执行,此时就可以使用dblink进行跨库操作。 -- 1、创建数据库 create database homedb; create database db1; -- 2、切换到homedb,创建dblink连接 select dblink_connect('connect_db1', 'dbname=db1 port=5432 user=root password=******** host=127.0.0.1'); dblink_connect ---------------- OK (1 row) --3、执行sql命令 --执行查询 SELECT * FROM dblink('connect_db1', 'select * from test') as test(id integer, info varchar(8)); id | info ----+------ 1 | a 2 | b (2 rows) --执行插入 SELECT dblink_exec('connect_db1', 'insert into test values(3,'c')'); dblink_exec ------------- INSERT 0 1 (1 row) -- 3、切换到db1查看结果 select * from test; id | info ----+------ 1 | a 2 | b 3 | c (3 rows) -- 4、关闭远程连接 SELECT dblink_disconnect('connect_db1'); dblink_disconnect ---------------- OK (1 row) 场景二: 同一VPC下有两个RDS for PostgreSQL数据库实例:生产环境(数据库db1)、测试环境(数据库db2)。需要将测试环境的数据同步至生产环境,此时在生产环境中可通过dblink插件实现数据同步。 -- 1、登录生产环境,创建数据库 create database db1; -- 2、切换到生产库db1,连接测试环境库db2 select dblink_connect('connect_db2', 'dbname=db2 port=5432 user=root password=******** host=10.29.182.247'); dblink_connect ---------------- OK (1 row) -- 3、查询测试库db2中test1表的值 SELECT * FROM dblink('host=10.29.182.247 port=5432 user=root password=******** dbname=db2', 'select * from test1') as test1(id int, name text); id | name ----+------ 1 | a 2 | b (2 rows) -- 4、将测试库db2中的test1表同步到生产库db1中的backup1表 insert into backup1 SELECT * FROM dblink('dbname=db2 port=5432 user=root password=******** host=10.29.182.247', 'select * from test1') as backup1(id int, name text); dblink ------------- INSERT 0 2 (2 row) --5、查询生产库db1库backup1表 select * from backup1; id | name ----+------ 1 | a 2 | b (2 rows) --6、关闭连接 SELECT dblink_disconnect('connect_db2'); dblink_disconnect ---------------- OK (1 row)
  • 支持的版本说明 PostgreSQL 12及以上版本的最新小版本支持该插件。可通过以下SQL语句查询当前实例支持该插件的版本: SELECT * FROM pg_available_extension_versions WHERE name = 'pg_cron'; 如果不支持,可通过升级内核小版本或者使用转储与还原升级大版本使用该插件。 RDS for PostgreSQ L实例 支持的插件,具体请参见支持的插件列表。
  • 插件介绍 标准cron语法,*表示每个时间段运行,特定数字表示仅在此时间。 ┌───────────── min (0 - 59) │ ┌────────────── hour (0 - 23) │ │ ┌─────────────── day of month (1 - 31) │ │ │ ┌──────────────── month (1 - 12) │ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to │ │ │ │ │ Saturday, or use names; 7 is also Sunday) │ │ │ │ │ │ │ │ │ │ 例如每周六9:30 AM(GMT)的语法为: 30 9 * * 6
  • 注意事项 pg_cron需要后台守护进程,因此启动数据库前,需要将pg_cron放到shared_preload_libraries中。 定时任务不会在备机上运行,但当备机升主后,定时任务会自动启动。 定时任务会以任务创建者的权限执行。 定时任务使用GMT时间执行。 一个实例可以并行运行多个任务,但同一时间某个任务仅能运行一个。 某个任务,需要等待前一个定时任务结束,那么该任务会进入等待队列,且会在前一个任务结束后尽快启动。 使用前,需要将cron.database_name修改为创建定时任务的数据库,并且只能设为单个数据库,不支持设置多个数据库。
  • 注意事项 plpgsql为内置插件,不允许卸载。 decoderbufs, wal2json等逻辑复制插件可以直接使用,不需要安装。 部分插件依赖“shared_preload_libraries”参数,只有在加载相关库之后,才能安装成功。 pg_cron插件当前仅支持PostgreSQL 12(12.11.0及其以上版本)、PostgreSQL 13及以上版本。使用时需要先修改参数“cron.database_name”为需要使用的数据库(仅支持单个数据库),同时修改“cron.use_background_workers”为“on”。 pltcl插件在PostgreSQL 13.2版本实例暂不支持使用,如需使用该插件,请先升级到最新小版本。 部分插件安装或卸载时,会同步安装或卸载其依赖插件,以及相关依赖表。例如:创建插件postgis_sfcgal时,需要先创建postgis插件,这时会同步创建postgis_sfcgal插件;同时,卸载postgis插件时,会同步卸载postgis_sfcgal插件。 部分插件在小版本升级后不支持直接升级,如需升级请卸载后重新安装。
  • 插件介绍 hypopg插件是RDSforPostgreSQL支持的一款开源第三方插件,hypopg创建的虚拟索引不会存在于任何系统表中,而是存放在连接的私有内存中。由于虚拟索引实际上并不真正存在于任何物理文件中,因此hypopg保证了虚拟索引只会被一个简单的EXPLAIN语句使用(不包括ANALYZE选项)。虚拟索引并不是真实存在的索引,因此不耗费CPU、磁盘或其他资源。 hypopg插件支持的索引类型如下: BTREE:B型树索引。 BRIN:块级索引。 HASH:哈希索引。 BLOOM:布隆索引(需要先安装bloom插件)。
  • 支持的版本说明 PostgreSQL 11及以上版本的最新小版本支持该插件。可通过以下SQL语句查询当前实例是否支持该插件: SELECT * FROM pg_available_extension_versions WHERE name = 'hypopg'; 如果不支持,可通过升级内核小版本或者使用转储与还原升级大版本使用该插件。 RDS for PostgreSQL实例支持的插件,具体请参见支持的插件列表。
  • 基本使用 此插件只能由root用户或者root的成员用户执行。 可以通过root用户直接执行,或者通过如下操作: grant root to drs_sync; 将root权限赋予drs_sync,这样drs_sync用户也能够执行。 赋予某个用户对pg_catalog.pg_authid的select权限。 select control_select_on_pg_authid('grant', 'drs_sync'); 其中,第一个参数可以选择grant, revoke;第二个参数是具体的用户,用户必须已存在。 对用户赋予bypassrls, replication的权限。 select control_user_privilege('bypassrls', 'drs_sync'); 其中,第一个参数是要赋予的权限,可选范围是bypassrls, nobypassrls, replication, noreplication;第二个参数是具体的用户,用户必须已存在。 创建对all tables的发布。 select create_publication_for_all_tables('foo_pub', 'insert, update'); select create_publication_for_all_tables('foo_pub'); 该函数只创建for all tables的发布,对于某个表的发布可以使用正常的SQL。 其中,第一个参数是发布名,不能和已有的发布重名;第二个参数是选项,可以缺省,缺省情况下和create publication foo_pub for all tables一样;不缺省的情况下,在RDS for PostgreSQL 10版本中可选的是insert, update, delete,在11版本中可选项多了truncate。 创建出来的publication的owner是root。可以使用root用户或者root的成员用户,通过SQL对该publication进行接下来的操作。 执行部分pg_replication_origin_xxx函数。 -- 创建一个复制源 select exec_pg_replication_origin_func('pg_replication_origin_create', 'foo_repl_origin'); -- 删除这个复制源 select exec_pg_replication_origin_func('pg_replication_origin_create', 'foo_repl_origin'); -- 查看当前会话是否绑定了复制源 select exec_pg_replication_origin_func('pg_replication_origin_session_is_setup'); 其中,第一个参数是要执行的函数名,可选范围是'pg_replication_origin_create', 'pg_replication_origin_drop', 'pg_replication_origin_oid', 'pg_replication_origin_session_setup', 'pg_replication_origin_session_reset', 'pg_replication_origin_session_is_setup';第二个参数是可以缺省的,是否缺省取决于要执行的函数是否需要参数值。
  • 支持的版本说明 该插件支持从9.5到15的版本,但是该插件的目的是给未root提权版本(9.5, 9.6, 10, 11.5及之前的版本)提升权限的,建议11.5之后的版本直接使用root用户进行此插件执行的赋权动作。 可通过以下SQL语句查询当前实例是否支持该插件: SELECT * FROM pg_available_extension_versions WHERE name = 'rds_hwdrs_privs'; RDS for PostgreSQL实例支持的插件,具体请参见支持的插件列表。
  • 插件安装与卸载 安装插件 SELECT control_extension('create', 'rds_hwdrs_ddl'); 在安装完该插件后,可以通过查看系统视图查看该插件创建的对象。 -- 查看hwdrs_ddl_info表 select relname, relowner::regrole, relacl from pg_class where relname = 'hwdrs_ddl_info'; relname | relowner | relacl ----------------+----------+------------------------------- hwdrs_ddl_info | root | {root=arwdDxt/root,=ard/root} -- 查看hwdrs_ddl_function函数 select proname, proowner::regrole from pg_proc where proname = 'hwdrs_ddl_function'; proname | proowner --------------------+---------- hwdrs_ddl_function | root (1 row) -- 查看hwdrs_ddl_event触发器 select evtname, evtevent from pg_event_trigger; evtname | evtevent -----------------+----------------- hwdrs_ddl_event | ddl_command_end (1 row) 卸载插件 SELECT control_extension('drop', 'rds_hwrds_ddl'); 更多信息,请参见通过界面安装和卸载插件和通过SQL命令安装和卸载插件。
  • 基本使用 pg_stat_statements插件安装好之后,需要开启对应参数。默认参数配置如下,可根据不同业务进行调整。 表1 参数说明 参数名称 是否需要重启 值 允许值 描述 pg_stat_statements.max 是 5000 100~5,000,000 设置pg_stat_statements跟踪的最大语句数。 pg_stat_statements.save 否 on on,off 保存服务器关闭期间的pg_stat_statements统计信息。 pg_stat_statements.track 否 top top,all,none 控制哪个语句可以被该模块计数。 pg_stat_statements.track_planning 否 off on,off 选择是否由pg_stat_statements跟踪计划持续时间。 pg_stat_statements.track_utility 否 on on,off 选择是否由pg_stat_statements跟踪实用程序命令。 此时,可以通过查询pg_stat_statements视图,获取统计信息。 select * from pg_stat_statements; 查询最耗IO的SQL。 --消耗IO的前五条SQL select userid::regrole, dbid, query from pg_stat_statements order by (blk_read_time+blk_write_time) desc limit 5; 查询最耗共享内存的SQL。 select userid::regrole, dbid, query from pg_stat_statements order by (shared_blks_hit+shared_blks_dirtied) desc limit 5; 重置统计信息。 select pg_stat_statements_reset();
  • 进阶使用 使用pg_stat_statements排查CPU过高问题。 为了方便排查CPU过高的问题,需要重置pg_stat_statements的计数器。 select pg_stat_statements_reset(); 等待一段时间,使pg_stat_statements能够统计到足够的信息。 获取最耗时的SQL。 select * from pg_stat_statements order by total_exec_time desc limit 10; 此步骤获取到的SQL会长时间占用用户态CPU时间,把这些SQL取出来分析。 获取读取Buffer次数最多的SQL。 select * from pg_stat_statements order by shared_blks_hit + shared_blks_read desc limit 10; 此步骤获取到的SQL可能由于缺少查询对应的索引,导致过多的buffer读,从而消耗大量CPU。 获取执行次数最多的SQL。 select * from pg_stat_statements order by calls desc limit 10; 有些比较简单的SQL单独执行耗时较低,但是在某些情况下(例如:在事务中循环执行、大量的并发执行)也会导致CPU的消耗增高。
  • 支持的版本说明 PostgreSQL 10及以上版本的最新小版本支持该插件。 可通过以下SQL语句查询当前实例是否支持该插件: SELECT * FROM pg_available_extension_versions WHERE name = 'pg_stat_statements'; 如果不支持,可通过升级内核小版本或者使用转储与还原升级大版本使用该插件。 RDS for PostgreSQL实例支持的插件,具体请参见支持的插件列表。
  • 插件安装与卸载 查看当前数据库是否有安装pg_stat_statements插件,执行如下SQL: select * from pg_extension where extname = 'pg_stat_statements'; 如果显示结果为空说明未安装该插件,如果显示插件的信息说明已安装该插件。 pg_stat_statements已默认预加载在shared_preload_libraries参数中,直接通过如下方式进行插件安装。 安装插件 SELECT control_extension('create', 'pg_stat_statements'); 删除插件 SELECT control_extension('drop', 'pg_stat_statements'); 更多信息,请参见通过界面安装和卸载插件和通过SQL命令安装和卸载插件。
  • 支持的版本说明 PostgreSQL 9.5及以上版本的最新小版本支持该插件。可通过以下SQL语句查询当前实例是否支持该插件: SELECT * FROM pg_available_extension_versions WHERE name = 'zhparser'; 如果不支持,可通过升级内核小版本或者使用转储与还原升级大版本使用该插件。 RDS PostgreSQL实例支持的插件,具体请参见支持的插件列表。
  • 基本使用 全文检索中文分词功能 -- 查看Zhparser的词典配置 SELECT ts_token_type('zhparser'); -- 配置中文解析器 CREATE TEXT SEARCH CONFIGURATION testzhcfg (PARSER = zhparser); 添加分词策略 -- 添加名词(n)、动词(v)、形容词(a)、成语(i)、叹词(e)和习用语(l) 六种分词策略 ALTER TEXT SEARCH CONFIGURATION testzhcfg ADD MAPPING FOR n,v,a,i,e,l WITH simple; 测试分词效果(to_tsvector) SELECT to_tsvector('testzhcfg','华为云数据库 RDS for PostgreSQL是一种典型的开源关系型数据库,在保证数据可靠性和完整性方面表现出色,支持互联网电商、地理位置应用系统、金融保险系统、复杂数据对象处理等场景。'); to_tsvector ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------- 'for':5 'postgresql':6 'rds':4 '云':2 '互联网':19 '保证':11 '典型':8 '出色':17 '华为':1 '可靠性':13 '地理位置':21 '场景':30 '处理':28 '复杂':25 '完整性':14 '对象':27 '应用系统':22 '开源':9 '支持':18 '数据':12,26 '数据库':3,10 '方面':15 '是':7 '电商':20 '等':29 '系统':24 '表现':16 '金融保险':23 (1 row) 测试分词效果(to_tsquery) SELECT to_tsquery('testzhcfg', 'PostgreSQL是一种典型的开源关系型数据库,在保证数据可靠性和完整性方面表现出色'); to_tsquery --------------------------------------------------------------------------------------------------------------------------------------------- 'postgresql' & '是' & '典型' & '开源' & '数据库' & '保证' & '数据' & '可靠性' & '完整性' & '方面' & '表现' & '出色' (1 row)
  • 进阶使用 利用分词进行全文索引,示例:为t1表的name字段创建全文索引,使用时将SQL语句中的表名(t1)和字段(name)替换为实际业务中的表名和字段值。 -- 创建测试表 CREATE TABLE t1(name text); INSERT INTO t1 VALUES ('华为云数据RDS for PostgreSQL是一种典型的开源关系型数据库'); INSERT INTO t1 VALUES ('在保证数据可靠性和完整性方面表现出色'); INSERT INTO t1 VALUES ('支持互联网电商、地理位置应用系统、金融保险系统、复杂数据对象处理等场景'); -- 创建索引 CREATE INDEX idx_t1 ON t1 USING gin (to_tsvector('testzhcfg',upper(name) )); -- 使用全文索引 SELECT * FROM t1 WHERE to_tsvector('testzhcfg',upper(t1.name)) @@ to_tsquery('testzhcfg','(互联网)') ; name ----------------------------------------------------------------------------------------------------------- 支持互联网电商、地理位置应用系统、金融保险系统、复杂数据对象处理等场景 (1 row)
  • 简介 PostgreSQL自带的parser插件适用于分词比较简单的语言(如英语),按照标点、空格切分语句即可获得有含义的词语,而中文比较复杂,词语之间没有空格分隔,长度也不固定,分词还和语义有关,因此parser不能用来做中文分词,建议使用zhparser。 zhparser是PostgreSQL的中文分词插件,安装后可以使PostgreSQL支持中文的全文检索(Full Text Search)。 全文检索总体介绍,请参见全文检索。 更多信息,请参见zhparser官方文档。
  • 进阶使用 在发布端和订阅端分别创建要复制的表。 create table test(id int primary key, name text, reg_time timestamp); 发布端和订阅端的表必须名字、结构一致。 在发布端给表插入数据。 insert into test select generate_series(1,10000),'test',now(); 在发布端将表加入复制集。 -- 将所有的表加入到复制集 SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']); -- 将指定的表加入到复制集 SELECT pglogical.replication_set_add_table( set_name := 'default', relation := 'test',synchronize_data := true); 如果执行sql将所有的表加入到复制集,那么在订阅端还需要执行以下步骤将数据同步,否则数据无法到达订阅端,订阅状态是unknown。 select pglogical.alter_subscription_synchronize('subscription1'); 如果执行sql将指定的表加入到复制集,则默认会自动同步。 验证该表已经被加入到复制集。 select * from pglogical.replication_set_table ; 订阅端查询订阅状态。 select * from pglogical.show_subscription_table('subscription1','test'); 订阅端查看表数据是否同步。 select count(*) from test;
  • 支持的版本说明 PostgreSQL 12及以上版本的最新小版本支持该插件。可通过以下SQL语句查询当前实例支持该插件的版本: SELECT * FROM pg_available_extension_versions WHERE name = 'pglogical'; 如果不支持,可通过升级内核小版本或者使用转储与还原升级大版本使用该插件。 RDS PostgreSQL实例支持的插件,具体请参见支持的插件列表。
  • 插件介绍 pglogical支持的使用场景: 主版本数据库之间的升级(存在上述的版本限制)。 完整的数据库复制。 利用复制集,选择性的筛选的关系表。 可从多个上游服务器,做数据的聚集和合并。 pglogical要求: pglogical 扩展必须同时安装在发布端和订阅端上。 发布端和订阅端上的表必须具有相同的名称并且位于相同的模式中。 发布端和订阅端的表必须具有相同的列,每列中的数据类型必须相同。 表必须具有相同的主键。不建议添加除 PRIMARY KEY 之外的其他 UNIQUE 约束。 要复制多个数据库,您必须为每个数据库设置单独的发布端/订阅端关系。无法同时为 PostgreSQL 安装中的所有数据库配置复制。
  • 基本使用 使用pglogical插件的功能,需要修改配置参数。 wal_level = 'logical' shared_preload_libraries = 'pglogical' shared_preload_libraries参数的修改可以参考修改shared_preload_libraries参数。 配置逻辑流复制。在发布端创建发布节点: SELECT pglogical.create_node( node_name := 'provider', dsn := 'host=127.0.0.1 port=5432 dbname=test user=provider_user' ); 配置复制集。将public中的所有表添加到default复制集: SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']); 复制集用来控制将发布节点数据库中的哪些表以及这些表上的哪些操作发布给订阅者。 default复制集,表示发布所有表及这些表的所有操作。 更多复制集定义请参见pglogical官方文档。 在订阅端创建订阅节点。 一旦设置了发布端节点,订阅者就可以订阅它。首先必须创建订阅者节点: SELECT pglogical.create_node( node_name := 'subscriber', dsn := 'host=127.0.0.1 port=5432 dbname=test user=subscriber_user' ); 在订阅端创建订阅。在订阅者节点创建订阅后,将在后台启动同步和复制过程: SELECT pglogical.create_subscription( subscription_name := 'subscription', provider_dsn := 'host=providerhost port=5432 dbname=test user=provider_user' ); SELECT pglogical.wait_for_subscription_sync_complete('subscription');
  • 支持版本说明 PostgreSQL 12及以上版本的最新小版本支持该插件。可通过以下SQL语句查询当前实例是否支持该插件: SELECT * FROM pg_available_extension_versions WHERE name = 'pgaudit'; 如果不支持,可通过升级内核小版本或者使用转储与还原升级大版本使用该插件。 RDS PostgreSQL实例支持的插件,具体请参见支持的插件列表。
  • 基本使用 设置pgaudit扩展 首先需要在插件管理中预加载pgaudit插件,因为pgaudit扩展会安装用于审核数据定义语言 (DDL) 语句的事件触发器。 默认插件管理中已预加载pgaudit插件,也可通过如下命令查看是否加载成功。 show shared_preload_libraries; shared_preload_libraries --------------------------------------------------------------------------------- pg_stat_statements,pgaudit,passwordcheck.so,pg_sql_history,auth_delay,pglogical (1 row) 加载成功后再进行创建插件,请参考插件安装/卸载。 插件安装好后,需要开启审计日志。 如需开通审计日志功能,请联系客服申请。 在控制台上单击实例名称,在概览页面,选择“SQL审计”页签。 单击“设置SQL审计”。 在弹框中,开启审计日志开关,可选择审计日志保留天数。 图1 设置SQL审计 开启审计日志后,还需要配置参数。 在界面“参数修改”页签,搜索“pgaudit.log”参数(指定会话审计日志将记录哪些类型的语句)并设置为适合业务需要的值,可以捕获对日志的插入、更新、删除和其他一些类型的更改。“pgaudit.log”参数取值如下: 表1 参数值说明 参数值 描述 none 这是原定设置值。不记录任何数据库更改。 all 记录所有内容(read、write、function、role、ddl、misc)。 ddl 记录所有数据定义语言(DDL)语句(不包括在 ROLE 类中)。 function 记录函数调用和DO块。 misc 记录其他命令,例如:DISCARD、FETCH、CHECKPOINT、VACUUM、SET read 当源为关系(例如表)或查询时记录SELECT和COPY。 role 记录与角色和权限相关的语句,例如:GRANT、REVOKE、CREATE ROLE、ALTER ROLE、DROP ROLE write 当目标为关系(表)时,记录INSERT、UPDATE、DELETE、TRUNCATE和COPY。 pgaudit还有一些参数,可根据业务需要在界面上进行设置。 表2 参数说明 参数名称 描述 pgaudit.log 指定会话审计日志记录将记录哪些类的语句。 pgaudit.log_catalog 指定在语句中的所有关系都在pg_catalog中的情况下,应该启用会话日志记录。 pgaudit.log_client_authentication 控制是否记录用户认证的信息。 pgaudit.log_extra_field 控制是否记录PID、IP、用户名、数据库等字段。 pgaudit.log_file_rotation_age 设置独立审计日志的轮转时间。 pgaudit.log_parameter 指定审核日志记录应该包含与语句传递的参数。 pgaudit.log_relation 指定会话审核日志记录是否应该为SELECT或DML语句中引用的每个关系(表、视图等)创建单独的日志项。 pgaudit.log_rows 指定审计日志记录应包括语句检索或影响的行。 pgaudit.log_write_txid 控制是否记录写操作(insert/update等)的txid。 pgaudit.logstatementonce 指定日志记录是否包含语句、文本和参数。 pgaudit.log_client 指定审计日志是否发送到客户端。 pgaudit.log_level 指定用于日志条目的日志级别。 pgaudit.write_into_pg_log_file 控制是否仍旧向PostgreSQL的运行日志记录审计信息。 如果您需要在客户端上显示审计日志,可以通过修改以下参数进行配置: “pgaudit.write_into_pg_log_file”和“pgaudit.log_client”参数值同时为on,再根据“pgaudit.log_level”参数选择客户端显示的日志级别(例如notice),客户端再次进行查询时,可以在客户端显示对应级别的审计日志。 “pgaudit.write_into_pg_log_file”和“pgaudit.log_client”参数只要有一个值为off,客户端不会显示审计日志。 “pgaudit.log_level”仅在“pgaudit.log_client”打开时启用。
  • SQL审计功能验证 执行sql语句。 create table t1 (id int); insert into t1 values (1); select * from t1; id ---- 1 (1 rows) 在界面上通过“SQL审计”页签进行审计日志下载。 审计日志包含以下内容: AUDIT: OBJECT,1,1,READ,SELECT,TABLE,public.t1,select * from t1; AUDIT:表示这是一个审计日志条目。 OBJECT:表示这是一个对象级别的审计日志。 第一个1:表示对象的 ID。 第二个1:表示对象的子 ID。 READ:表示这是一个读取操作。 SELECT:表示这是一个 SELECT 查询。 TABLE:表示对象类型是表。 public.t1:表示表的名称和模式。 select * from t1:表示执行的 SQL 查询语句。
  • 支持的版本 PostgreSQL 12及以上版本的最新小版本支持该插件。可通过以下SQL语句查询当前实例是否支持该插件: SELECT * FROM pg_available_extension_versions WHERE name = 'vector'; 如果不支持,可通过升级内核小版本或者使用转储与还原升级大版本使用该插件。 RDS PostgreSQL实例支持的插件,具体请参见支持的插件列表。
  • 支持的版本说明 PostgreSQL 12及以上版本的最新小版本支持该插件。可通过以下SQL语句查询当前实例是否支持该插件: SELECT * FROM pg_available_extension_versions WHERE name = 'pgl_ddl_deploy'; 如果不支持,可通过升级内核小版本或者使用转储与还原升级大版本使用该插件。 RDS PostgreSQL实例支持的插件,具体请参见支持的插件列表。
  • 插件介绍 RDS PostgreSQL支持pgl_ddl_deploy插件,用于自动同步DDL语句,在很多环境中,能够涵盖大部分在应用环境中执行的DDL语句。 任何DDL语句都可以同步给订阅者。 表可以在创建时自动添加到复制中。 支持按正则表达式、按一组特定的表进行过滤。 可以选择以锁定安全的方式部署在订阅者上。 可以选择使订阅者上的某些事件失败,以便稍后重试。 可以在某些边缘情况下,围绕为DBA提供的日志记录构建警报,然后处理可能的手动部署。 ALTER TABLE语句可以通过子命令标签进行过滤。 可选支持自动终止订阅者系统上组织DDL执行的阻塞进程。
  • 简介 有很多的数据库出于各种目的需要将数据复制到其他数据库,其中移动数据最有用的数据库技术之一被称为“逻辑复制”,但是数据库中有两类SQL语句,DML和DDL,出于很多原因,必须单独处理DDL,在迁移过程中需要让DBA以正确的顺序为所有涉及的数据库集群手动部署SQL,管理锁的争抢,并在必要时将新表添加到复制中。pgl_ddl_deploy建立在pglogical之上,能够使得任何DDL SQL语句都可以直接传播给订阅者,解决了pglogical不能够同步DDL语句的问题。 更多信息,请参见pgl_ddl_deploy官方文档。
  • 不支持的命令 CREATE TABLE AS和SELECT INTO由于事务的一致性,不支持复制DDL,如果表是根据提供者的上一组数据创建的,那么在订阅者上运行相同的SQL将无法保证数据的一致性。例如: CREATE TABLE foo AS SELECT field_1, field_2, now() AS refreshed_at FROM table_1; SELECT INTO和CREATE TABLE AS类似,会出现提示: WARNING: Unhandled deployment logged in pgl_ddl_deploy.unhandled
共100000条