

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# ALTER DATASHARE
<a name="r_ALTER_DATASHARE"></a>

更改数据共享的定义。您可以使用 ALTER DATASHARE 添加对象或删除对象。您只能更改当前数据库中的数据共享。将对象从关联数据库添加到数据共享中或者从数据共享中删除对象。对要添加或删除的数据共享具有所需权限的数据共享拥有者可以更改数据共享。

## 所需的权限
<a name="r_ALTER_DATASHARE-privileges"></a>

以下是 ALTER DATASHARE 所需的权限：
+ 超级用户。
+ 具有 ALTER DATASHARE 权限的用户。
+ 对数据共享具有 ALTER 或 ALL 权限的用户。
+ 要将特定对象添加到数据共享中，用户必须具有对象的权限。在此例中，用户应是对象的拥有者，或者具有这些对象的 SELECT、USAGE 或 ALL 权限。

## 语法
<a name="r_ALTER_DATASHARE-synopsis"></a>

以下语法展示了如何向数据共享添加或删除对象。

```
ALTER DATASHARE datashare_name { ADD | REMOVE } {
TABLE schema.table [, ...]
| SCHEMA schema [, ...]
| FUNCTION schema.sql_udf (argtype,...) [, ...]
| ALL TABLES IN SCHEMA schema [, ...]
| ALL FUNCTIONS IN SCHEMA schema [, ...] }
```

以下语法展示了如何配置数据共享的属性。

```
ALTER DATASHARE datashare_name {
[ SET PUBLICACCESSIBLE [=] TRUE | FALSE ]
[ SET INCLUDENEW [=] TRUE | FALSE FOR SCHEMA schema ] }
```

## 参数
<a name="r_ALTER_DATASHARE-parameters"></a>

*datashare\$1name*  
要更改的数据共享的名称。

ADD \$1 REMOVE  
指定是向数据集中添加对象还是从中删除对象的子句。

TABLE *schema*.*table* [, ...]  
要添加到数据共享的指定 schema 中的表或视图的名称。

SCHEMA *schema* [, ...]   
要添加到数据共享中的 schema 的名称。

FUNCTION *schema*.*sql\$1udf* (argtype,...) [, ...]  
要添加到数据共享的用户定义的 SQL 函数的名称和参数类型。

ALL TABLES IN SCHEMA *schema* [, ...]   
指定是否将指定 schema 中的所有表和视图添加到数据共享中的子句。

ALL FUNCTIONS IN SCHEMA *schema* [, ...] \$1  
指定将指定 schema 中的所有函数添加到数据共享中的子句。

[ SET PUBLICACCESSIBLE [=] TRUE \$1 FALSE ]  
指定是否可以将数据共享共享给可公开访问的集群的子句。

[ SET INCLUDENEW [=] TRUE \$1 FALSE FOR SCHEMA *schema* ]  
指定是否将在指定 schema 中创建的任何未来表、视图或 SQL 用户定义函数 (UDF) 添加到数据共享中的子句。指定 schema 中的当前表、视图或 SQL UDF 不会添加到数据共享中。只有超级用户才可以更改每个数据共享-schema 对的此属性。预设情况下，INCLUDENEW 子句为 false。

## ALTER DATASHARE 使用说明
<a name="r_ALTER_DATASHARE_usage"></a>
+ 以下用户可以更改数据共享：
  + 超级用户
  + 数据共享的拥有者
  + 对数据共享具有 ALTER 或 ALL 权限的用户
+ 要将特定对象添加到数据共享中，用户必须具有对象的正确权限。用户应该是对象的拥有者，或者对这些对象具有 SELECT、USAGE 或 ALL 权限。
+ 您可以共享 schema、表、常规视图、后期绑定视图、实体化视图和 SQL 用户定义函数 (UDF)。在架构中添加对象之前，首先将架构添加到数据共享中。

  当您添加 schema 时，Amazon Redshift 不会在其下添加所有对象。您必须显式添加它们。
+ 我们建议您在可公开访问的设置处于开启状态下创建 AWS Data Exchange 数据共享。
+ 通常，我们不建议您使用 ALTER DATASHARE 语句更改 AWS Data Exchange 数据共享，以关闭公开可访问性。如果您这样做的话，如果其集群可以公开访问，有权访问数据共享的 AWS 账户 将失去访问权限。执行这种类型的更改可能会违反 AWS Data Exchange 中的数据产品条款。对于此建议的例外情况，请参阅以下内容。

  以下示例显示了设置处于关闭状态下创建 AWS Data Exchange 数据共享时发生的错误。

  ```
  ALTER DATASHARE salesshare SET PUBLICACCESSIBLE FALSE;
  ERROR:  Alter of ADX-managed datashare salesshare requires session variable datashare_break_glass_session_var to be set to value 'c670ba4db22f4b'
  ```

  要允许更改 AWS Data Exchange 数据共享，以禁用可公开访问的设置，请设置以下变量，然后再次运行 ALTER DATASHARE 语句。

  ```
  SET datashare_break_glass_session_var to 'c670ba4db22f4b';
  ```

  ```
  ALTER DATASHARE salesshare SET PUBLICACCESSIBLE FALSE;
  ```

  在这种情况下，Amazon Redshift 会生成一个随机的一次性值来设置会话变量，以允许对 AWS Data Exchange 数据共享执行 ALTER DATASHARE SET PUBLICACCESSIBLE FALSE。

## 示例
<a name="r_ALTER_DATASHARE_examples"></a>

以下示例将 `public` 架构添加到数据共享 `salesshare` 中。

```
ALTER DATASHARE salesshare ADD SCHEMA public;
```

以下示例将 `public.tickit_sales_redshift` 表添加到了数据共享 `salesshare` 中。

```
ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift;
```

以下示例将所有表添加到了数据共享 `salesshare` 中。

```
ALTER DATASHARE salesshare ADD ALL TABLES IN SCHEMA PUBLIC;
```

以下示例删除了数据共享 `salesshare` 中的 `public.tickit_sales_redshift` 表。

```
ALTER DATASHARE salesshare REMOVE TABLE public.tickit_sales_redshift;
```