PostgreSQL 需要的权限
本文介绍 PostgreSQL 作为源端或对端数据源迁移或同步数据时,CloudCanal 所需的账号权限。
作为源端
- 全量迁移:迁移库表的 SELECT、REFERENCES 权限。
示例:-- 创建同步用户 (cc_test_user)
CREATE USER cc_test_user WITH PASSWORD 'Clougence@2021';
-- 授权同步用户 (cc_test_user) 需要同步的 SCHEMA (public) 权限
GRANT SELECT,REFERENCES ON ALL TABLES IN SCHEMA public TO cc_test_user; - 增量同步:
- 同步数据库的 CREATE 权限。
- 同步表的 OWNER 权限。
- 同步用户的 REPLICATION 权限。
示例:-- 创建同步用户 (cc_test_user)
CREATE USER cc_test_user WITH PASSWORD 'Clougence@2021';
-- 授权同步用户 (cc_test_user) 同步表 owner 的角色 (postgres)
GRANT postgres TO cc_test_user;
-- 开启同步用户 (cc_test_user) 的 REPLICATION
ALTER USER cc_test_user REPLICATION; - 任务开启 DDL 同步 需要创建相关触发器和表。
示例:-- 创建 DDL 记录表 (cc_pg_ddl_capture_tab)
CREATE TABLE IF NOT EXISTS public.cc_pg_ddl_capture_tab(
id bigserial primary key,
biz_ddl text,
biz_user character varying(64) default current_user,
biz_txid character varying(16) default txid_current()::varchar(16),
biz_tag character varying(64),
biz_db character varying(64) default current_database(),
biz_schema character varying(64) default current_schema,
biz_client_addr character varying(64) default inet_client_addr(),
biz_client_port integer default inet_client_port(),
biz_event_time timestamp default current_timestamp
);
-- 创建 DDL 捕获函数 (cc_pg_ddl_capture_func)
CREATE OR REPLACE FUNCTION public.cc_pg_ddl_capture_func() RETURNS event_trigger
LANGUAGE plpgsql
SECURITY INVOKER
AS $$
declare ddl text;
begin if (tg_tag in ('DROP INDEX','ALTER TABLE','DROP TABLE','CREATE INDEX','CREATE TABLE')) then
select current_query() into ddl;
insert into public.cc_pg_ddl_capture_tab(biz_ddl,biz_user,biz_txid,biz_tag,biz_db,biz_schema,biz_client_addr,biz_client_port,biz_event_time) values (ddl,current_user,cast(txid_current() as varchar(16)),tg_tag,current_database(),current_schema,inet_client_addr(),inet_client_port(),current_timestamp);
end if;
end;
$$
-- 开启相关权限
GRANT USAGE ON SCHEMA public TO public;
GRANT SELECT,INSERT,DELETE ON TABLE public.cc_pg_ddl_capture_tab TO public;
GRANT SELECT,USAGE ON SEQUENCE public.cc_pg_ddl_capture_tab_id_seq TO public;
GRANT EXECUTE ON FUNCTION public.cc_pg_ddl_capture_func() TO public;
-- 创建 DDL 事件触发器 (cc_pg_ddl_capture_event)
CREATE EVENT TRIGGER cc_pg_ddl_capture_event ON ddl_command_end EXECUTE PROCEDURE public.cc_pg_ddl_capture_func();
ALTER EVENT TRIGGER cc_pg_ddl_capture_event ENABLE always;
作为对端
全量迁移/增量同步:迁移库表的 INSERT、UPDATE、DELETE、DDL 权限。