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,则该命令将检索指定数据库的所有架构的记录。

  • 如果您未指定 db_name,那么:

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

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

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

  • 如果指定限定架构名称(例如,my_database.my_schema),则该命令将检索指定数据库和架构的记录。

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

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

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

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

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

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

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

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

如果指定了不带 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),则:

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

    • 如果当前数据库不存在,该命令将显示如下所示的错误: :code:` Cannot perform SHOW <object_type>.This session does not have a current database...`.

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

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

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

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

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

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

使用说明

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

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

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

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

  • 若要对此命令的输出进行后处理,可以使用 RESULT_SCAN 函数,该函数会将输出视为可查询的表。

重要

对于标准表,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
语言: 中文