

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

# 查询目录表
<a name="c_join_PG"></a>

**Topics**
+ [目录查询示例](c_join_PG_examples.md)

通常，可将目录表和视图（其名称以 **PG\$1** 开头的关系）联接到 Amazon Redshift 表和视图。

目录表使用了 Amazon Redshift 不支持的大量数据类型。当查询将目录表联接到 Amazon Redshift 表时，支持以下数据类型：
+ 布尔
+ "char"
+ float4
+ int2
+ int4
+ int8
+ 名称
+ oid
+ text
+ varchar

如果编写一个显式或隐式引用具有不支持的数据类型的列的联接查询，则该查询将返回一个错误。某些目录表中使用的 SQL 函数也受支持，但 PG\$1SETTINGS 和 PG\$1LOCKS 表使用的 SQL 函数除外。

例如，无法在与 Amazon Redshift 表的联接中查询 PG\$1STATS 表，因为存在不受支持的函数。

以下目录表和视图提供了可联接到 Amazon Redshift 表中的信息的有用信息。由于数据类型和函数限制，其中的一些表仅允许部分访问。在查询可部分访问的表时，请仔细选择或引用其列。

以下表可完全访问且不包含任何不受支持的数据类型或函数：
+  [pg\$1attribute](https://www.postgresql.org/docs/8.0/static/catalog-pg-attribute.html) 
+  [pg\$1cast ](https://www.postgresql.org/docs/8.0/static/catalog-pg-cast.html) 
+  [pg\$1depend](https://www.postgresql.org/docs/8.0/static/catalog-pg-depend.html) 
+  [pg\$1description ](https://www.postgresql.org/docs/8.0/static/catalog-pg-description.html) 
+  [pg\$1locks ](https://www.postgresql.org/docs/8.0/static/view-pg-locks.html) 
+  [pg\$1opclass ](https://www.postgresql.org/docs/8.0/static/catalog-pg-opclass.html) 

以下表可部分访问且包含一些不受支持的类型、函数和已截断的文本列。文本列中的值将截断为 varchar(256) 值。
+  [pg\$1class](https://www.postgresql.org/docs/8.0/static/catalog-pg-class.html) 
+  [pg\$1constraint](https://www.postgresql.org/docs/8.0/static/catalog-pg-constraint.html) 
+  [pg\$1database](https://www.postgresql.org/docs/8.0/static/catalog-pg-database.html) 
+  [pg\$1group](https://www.postgresql.org/docs/8.0/static/catalog-pg-group.html) 
+  [pg\$1language ](https://www.postgresql.org/docs/8.0/static/catalog-pg-language.html) 
+  [pg\$1namespace](https://www.postgresql.org/docs/8.0/static/catalog-pg-namespace.html) 
+  [pg\$1operator](https://www.postgresql.org/docs/8.0/static/catalog-pg-operator.html) 
+  [pg\$1proc](https://www.postgresql.org/docs/8.0/static/catalog-pg-proc.html) 
+  [pg\$1settings](https://www.postgresql.org/docs/8.0/static/view-pg-settings.html) 
+  [pg\$1statistic](https://www.postgresql.org/docs/8.0/static/catalog-pg-statistic.html) 
+  [pg\$1tables](https://www.postgresql.org/docs/8.0/static/view-pg-tables.html) 
+  [pg\$1type ](https://www.postgresql.org/docs/8.0/static/catalog-pg-type.html) 
+  [pg\$1user](https://www.postgresql.org/docs/8.0/static/view-pg-user.html) 
+  [pg\$1views](https://www.postgresql.org/docs/8.0/static/view-pg-views.html) 

对于 Amazon Redshift 管理员，此处未列出的目录表是不可访问的或可能没有用。不过，当查询未涉及与 Amazon Redshift 表的联接时，可以查询任何目录表或视图。

可以将 Postgres 目录表中的 OID 列用作联接列。例如，联接条件 `pg_database.oid = stv_tbl_perm.db_id` 将每个 PG\$1DATABASE 行的内部数据库对象 ID 与 STV\$1TBL\$1PERM 表中的可见 DB\$1ID 列匹配。OID 列是内部主键，当您从表中选择时，这些列不可见。目录视图没有 OID 列。

某些 Amazon Redshift 函数必须只在计算节点上运行。如果查询引用用户创建的表，则 SQL 在计算节点上运行。

仅引用目录表（具有 PG 前缀的表（如 PG\$1TABLE\$1DEF））或不引用任何表的查询在领导节点上以独占方式运行。

如果使用计算节点函数的查询不引用用户定义的表，否则 Amazon Redshift 系统表会返回以下错误。

```
[Amazon](500310) Invalid operation: One or more of the used functions must be applied on at least one user created table.
```