SHOW PRIMARY KEYS

列出一个或多个表的主键。您可以指定以下选项:

  • 单个表

  • 当前或指定架构中的所有表

  • 当前或指定数据库中的所有表

  • 当前账户中的所有表

语法

SHOW [ TERSE ] PRIMARY KEYS
    [ IN { ACCOUNT | DATABASE [ <database_name> ] | SCHEMA [ <schema_name> ] | TABLE | [ TABLE ] <table_name> } ]
Copy

参数

TERSE

语法接受该子句,但对输出没有影响。

IN { ACCOUNT | DATABASE [ <database_name> ] | SCHEMA [ <schema_name> ] | TABLE | [ TABLE ] <table_name> }

指定命令的作用域,该作用域决定命令是仅列出当前的还是指定的数据库、架构、表或账户的记录。

如果您指定关键字 ACCOUNT,则该命令将检索当前账户的所有数据库中所有架构的记录。

如果您指定关键字 DATABASE,那么:

  • 如果指定 db_name,则该命令将检索指定数据库的所有架构的记录。

  • If you don't specify a db_name, then:

    • 如果存在当前数据库,则该命令将检索当前数据库中所有架构的记录。

    • 如果当前没有数据库,则该命令将检索账户中所有数据库和架构的记录。

如果您指定关键字 SCHEMA,那么:

  • If you specify a qualified schema name (for example, my_database.my_schema), then the command retrieves records for the specified database and schema.

  • 如果您指定了未限定的 schema_name,那么:

    • 如果存在当前数据库,则该命令将检索当前数据库中指定架构的记录。

    • 如果当前没有数据库,则该命令会显示错误 SQL compilation error: Object does not exist, or operation cannot be performed

  • If you don't specify a schema_name, then:

    • 如果当前有数据库,那么:

      • 如果当前存在架构,则该命令将检索当前数据库中当前架构的记录。

      • 如果不存在当前架构,则该命令将检索当前数据库中所有架构的记录。

    • 如果当前没有数据库,则该命令将检索账户中所有数据库和所有架构的记录。

如果指定了不带 table_nameTABLE 关键字,则:

  • 如果当前有数据库,那么:

    • 如果当前存在架构,则该命令将检索当前数据库中当前架构的记录。

    • 如果不存在当前架构,则该命令将检索当前数据库中所有架构的记录。

  • 如果当前没有数据库,则该命令将检索账户中所有数据库和所有架构的记录。

如果指定了 :code:` <table_name> ` (带或不带 TABLE 关键字),则:

  • 如果指定了完全限定的 :code:` <table_name> ` (例如 my_database_name.my_schema_name.my_table_name),则该命令将检索指定表的所有记录。

  • 如果指定了架构限定的 :code:` <table_name> ` (例如 my_schema_name.my_table_name),则:

    • 如果当前数据库存在,该命令将检索指定表的所有记录。

    • 如果当前数据库不存在,则该命令将显示类似于 Cannot perform SHOW <object_type> 的错误。此会话没有当前数据库...

  • 如果您指定了未限定的 <table_name>,那么:

    • 如果有当前数据库和当前架构,该命令将检索当前数据库的当前架构中指定表的记录。

    • 如果没有当前数据库或没有当前架构,该命令将显示类似于以下这样的错误::code:`SQL compilation error: <object> does not exist or not authorized. `

默认:取决于会话当前是否正在使用数据库:

  • 数据库:DATABASE 是默认值(即该命令返回您有权在数据库中查看的对象)。

  • 无数据库:ACCOUNT 是默认值(即该命令返回您有权在账户中查看的对象)。

使用说明

  • 对于每个单列主键,输出中都包含一行。

  • 对于每个多列主键,输出中都包含与主键中的每列对应的一行。

  • 如果一个账户(或数据库或架构)有大量表,则搜索整个账户(或表或架构)可能会使用大量的计算资源。

  • 该命令不需要正在运行的仓库即可执行。

  • 该命令仅返回当前用户的当前角色已获授至少一项访问权限的对象。

  • MANAGE GRANTS 访问权限隐式允许其持有者查看账户中的每个对象。默认情况下,只有账户管理员(具有 ACCOUNTADMIN 角色的用户)和安全管理员(具有 SECURITYADMIN 角色的用户)才具有 MANAGE GRANTS 权限。

  • To post-process the output of this command, you can use the pipe operator (->>) or the RESULT_SCAN function. Both constructs treat the output as a result set that you can query.

    The output column names for this command are generated in lowercase. If you consume a result set from this command with the pipe operator or the RESULT_SCAN function, use double-quoted identifiers for the column names in the query to ensure that they match the column names in the output that was scanned. For example, if the name of an output column is type, then specify "type" for the identifier.

重要

对于标准表,Snowflake不强制执行 PRIMARY KEY 约束;但是,对 混合表 强制执行。

输出

命令输出在以下列中提供主键属性和元数据:

描述

created_on

创建表的日期和时间。

database_name

存储表的数据库。

schema_name

存储表的架构。

table_name

表的名称。

column_name

主键中的列的名称。

key_sequence

如果主键由多个列组成,则 key_sequence 列中的数字指示这些列在主键中的顺序。例如,如果主键定义为 CONSTRAINT pkey1 PRIMARY KEY (column_x, column_y),则 column_xkey_sequence 数字为 1,column_y 的 key_sequence 数字为 2。

comment

创建约束时为约束指定的注释(如果有)。

constraint_name

约束的名称。

示例

SHOW PRIMARY KEYS;

SHOW PRIMARY KEYS IN ACCOUNT;

SHOW PRIMARY KEYS IN DATABASE;

SHOW PRIMARY KEYS IN DATABASE my_database;

SHOW PRIMARY KEYS IN SCHEMA;

SHOW PRIMARY KEYS IN SCHEMA my_schema;

SHOW PRIMARY KEYS IN SCHEMA my_database.my_schema;

SHOW PRIMARY KEYS IN my_table;

SHOW PRIMARY KEYS IN my_database.my_schema.my_table;
Copy
语言: 中文