

 从补丁 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/)。

# HAS\$1TABLE\$1PRIVILEGE
HAS\$1TABLE\$1PRIVILEGE

如果用户对指定的表具有指定特权，则返回 `true`，否则返回 `false`。

## 语法
语法

**注意**  
这是领导节点函数。如果此函数引用了用户创建的表、STL/STV 系统表或 SVV/SVL 系统视图，它将返回错误。有关权限的更多信息，请参阅 [GRANT](r_GRANT.md)。

```
has_table_privilege( [ user, ] table, privilege)
```

## 参数
参数

 *用户*   
要接受表特权检查的用户的名称。默认为检查当前用户。

 *table*   
与特权关联的表。

 *privilege*   
要检查的特权。有效值如下所示：  
+ SELECT
+ INSERT
+ UPDATE
+ DELETE
+ DROP
+ REFERENCES

## 返回类型
返回类型

BOOLEAN

## 示例
示例

以下查询发现 GUEST 用户对 LISTING 表没有 SELECT 特权。

```
select has_table_privilege('guest', 'listing', 'select');

has_table_privilege
---------------------
false
```

以下查询使用 pg\$1tables 和 pg\$1user 目录表的输出来列出表权限，包括选择、插入、更新和删除。这只是一个示例。您可能需要指定数据库中的架构名称和表名。有关更多信息，请参阅 [查询目录表](c_join_PG.md)。

```
SELECT 
     tablename
     ,usename
     ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'select') AS sel
     ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'insert') AS ins
     ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'update') AS upd
     ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'delete') AS del
FROM
(SELECT * from pg_tables
WHERE schemaname = 'public' and tablename in ('event','listing')) as tables
,(SELECT * FROM pg_user) AS users;

tablename | usename   |  sel   |  ins  |  upd  | del
----------+-----------+--------+-------+-------+-------
event     |  john     |  true  | true  | true  | true	
event     |  sally    |  false | false | false | false	
event     |  elsa     |  false | false | false | false	
listing   |  john     |  true  | true  | true  | true	
listing   |  sally    |  false | false | false | false	
listing   |  elsa     |  false | false | false | false
```

前一个查询还包含交叉联接。有关更多信息，请参阅 [JOIN 示例](r_Join_examples.md)。要查询不在 `public` 架构中的表，请从 WHERE 子句中删除 `schemaname` 条件，并在查询之前使用以下示例。

```
SET SEARCH_PATH to 'schema_name';
```