更新时间:2026-07-02 GMT+08:00
分享

ALTER PUBLICATION

功能描述

更改发布的属性。

注意事项

  • 该语法仅8.2.0.100及以上集群版本支持。
  • 发布的所有者和系统管理员才能执行ALTER PUBLICATION。
  • 要更改发布的所有者,用户必须是新所有者角色的直接或者间接成员,并且新的所有者必须具有当前数据库的CREATE权限。
  • FOR ALL TABLES发布的新所有者必须是系统管理员。
  • 管理员用户可以更改任何发布的所属关系。

语法格式

  • 向发布中添加一个或多个发布对象。
    1
    ALTER PUBLICATION name ADD publication_object [, ...]
    
  • 从发布中删除一个或多个发布对象。
    1
    ALTER PUBLICATION name DROP publication_object [, ...]
    
  • 用指定的发布对象替换当前发布对象。

    1
    ALTER PUBLICATION name SET publication_object [, ...]
    
  • 设置发布的参数,未显示指定的参数保持原值。
    1
    ALTER PUBLICATION name SET ( publication_parameter [= value] [, ... ] )
    
  • 更改发布的所有者。
    1
    ALTER PUBLICATION name OWNER TO new_owner
    
  • 重命名发布。
    1
    ALTER PUBLICATION name RENAME TO new_name
    

其中发布对象publication_object为:

TABLE table_name [, ...]
| ALL TABLES IN SCHEMA schema_name [, ... ]

参数说明

表1 ALTER PUBLICATION参数说明

参数

描述

取值范围

name

需要修改的发布的名称。

已存在的发布名。

table_name

表名称。

已存在的表名。

schema_name

模式的名称。

已存在的模式名。

SET ( publication_parameter [= value] [, ... ] )

该子句修改最初由CREATE PUBLICATION设置的发布参数。

详细的参数说明请参考CREATE PUBLICATION的参数说明

new_owner

发布的新所有者。

已存在的用户名。

new_name

发布的新名称。

字符串,需符合标识符命名规范

示例

  • 创建模式、示例表及样例数据。
    DROP SCHEMA IF EXISTS pub_demo;
    CREATE SCHEMA pub_demo;
    
    DROP TABLE IF EXISTS pub_demo.sales;
    CREATE TABLE pub_demo.sales
     (
        sale_id    INTEGER,
        product    VARCHAR(50),
        amount     INTEGER NOT NULL,
        sale_date  DATE
    ) WITH (ORIENTATION = COLUMN,enable_disaster_cstore='on') DISTRIBUTE BY HASH ( sale_id);
    
    DROP TABLE IF EXISTS pub_demo.sales;
    CREATE TABLE pub_demo.customers 
    (
        cust_id   INTEGER,
        cust_name VARCHAR(50),
        region    VARCHAR(20)
    ) WITH (ORIENTATION = COLUMN,enable_disaster_cstore='on') DISTRIBUTE BY HASH ( cust_id);
    
    INSERT INTO pub_demo.sales VALUES (1, 'Laptop', 500, '2026-01-15');
    INSERT INTO pub_demo.sales VALUES (2, 'Mouse',  900,  '2026-01-16');
    INSERT INTO pub_demo.customers VALUES (101, 'Alice', 'East');
    INSERT INTO pub_demo.customers VALUES (102, 'Bob',   'West');

    创建名称为pub_sales的发布。

    CREATE PUBLICATION pub_sales FOR TABLE pub_demo.sales;
  • 向发布中添加表。
    ALTER PUBLICATION pub_sales ADD TABLE pub_demo.customers;
    ALTER PUBLICATION pub_sales ADD TABLE pub_demo.customers;
  • 从发布中删除表。
    ALTER PUBLICATION pub_sales DROP ALL TABLES IN SCHEMA pub_demo;
    ALTER PUBLICATION pub_sales DROP TABLE pub_demo.customers;
  • 重新设置发布对象。
    ALTER PUBLICATION pub_sales SET TABLE pub_demo.customers;
  • 向发布中添加整个schema的所有表。
    ALTER PUBLICATION pub_sales ADD ALL TABLES IN SCHEMA public;
  • 修改发布参数,只发布INSERT操作。
    ALTER PUBLICATION pub_sales SET (publish = 'insert');
  • 修改发布的所有者。
    CREATE ROLE new_publisher PASSWORD '********';
    GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA pub_demo TO new_publisher;
    ALTER PUBLICATION pub_sales OWNER TO new_publisher;
  • 修改发布名称。
    ALTER PUBLICATION pub_sales RENAME TO pub_sales_new;

查看数据库中的发布信息

DWS提供以下系统表和视图用于查看当前数据库中的发布信息。
  • PG_PUBLICATION系统表,用于查看当前数据库中创建的发布数据信息,包括发布名称、所有者、参数设置等。
  • PG_PUBLICATION_TABLES系统视图,用于查看发布包含的表。

相关文档