此部分包含用于管理表和约束的函数。
另请参阅 V_CATALOG.TABLE_CONSTRAINTS 系统表。
此部分包含用于管理表和约束的函数。
另请参阅 V_CATALOG.TABLE_CONSTRAINTS 系统表。
在指定范围内分析和报告约束违规
您可以在执行 INSERT
、UPDATE
、MERGE
或 COPY
语句时启用自动强制执行主键约束、唯一键约束和检查约束。另外,您可以在发出这些语句后使用 ANALYZE_CONSTRAINTS
验证约束。参考约束强制执行了解更多信息。
ANALYZE_CONSTRAINTS
以 SELECT * FROM t1
持有表 t1
的锁定的相同方式执行锁定。有关其他信息,请参阅
LOCKS
。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
ANALYZE_CONSTRAINTS ('[[[database.]schema.]table ]' [, 'column[,...]'] )
[database.]schema
数据库和架构。默认架构为 public
。如果指定一个数据库,它必须是当前数据库。
表
架构:USAGE
表:SELECT
Vertica 在运行查询(而不是加载数据)时检查约束违规。要在加载进程中检测违反约束,使用 COPY 语句的 NO COMMIT 选项。通过加载数据但不提交数据,可以使用 ANALYZE_CONSTRAINTS
函数对数据执行加载后检查。如果此函数发现违反约束,由于您尚未提交数据,因此可以回退加载。
如果 ANALYZE_CONSTRAINTS
发现冲突,比如当您在主键中插入一个重复值时,则可以使用以下函数更正错误。效果仅持续到会话结束为止:
ANALYZE_CONSTRAINTS
返回一个结构集中的结果(参阅下表),其中列出造成违规的架构名称、表名称、列名称、约束名称、约束类型和列值。
如果结果集为空,则不存在违反约束;例如:
> SELECT ANALYZE_CONSTRAINTS ('public.product_dimension', 'product_key');
Schema Name | Table Name | Column Names | Constraint Name | Constraint Type | Column Values
-------------+------------+--------------+-----------------+-----------------+---------------
(0 rows)
下面的结果集显示主键冲突,以及导致冲突的值 ('10')
:
=> SELECT ANALYZE_CONSTRAINTS ('');
Schema Name | Table Name | Column Names | Constraint Name | Constraint Type | Column Values
-------------+------------+--------------+-----------------+-----------------+---------------
store t1 c1 pk_t1 PRIMARY ('10')
(1 row)
结果集列在下表中详细描述:
请参阅检测约束违规。
分析紧密相关的列对的指定表。ANALYZE_CORRELATIONS 存储相关性最强的 20 对。ANALYZE_CORRELATIONS 还分析统计信息。
ANALYZE_CORRELATIONS 只能分析成对的单列相关。
例如,州名与国家/地区名称列紧密相关,因为通过市名通常(但并非始终)可以确认州名。康舍霍肯市与宾夕法尼亚州唯一相关,相比较而言,佐治亚州、印地安那州、肯塔基州、纽约州、弗吉尼亚州和马萨诸塞州则都有波士顿市。在本例中,市名与州名紧密相关。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
ANALYZE_CORRELATIONS ('[[[database.]schema.]table ]' [, 'recalculate'] )
[database.]schema
数据库和架构。默认架构为 public
。如果指定一个数据库,它必须是当前数据库。
table-name
recalculate
默认值: false
以下几项之一:
拥有设计架构 USAGE 权限的用户。
在下例中,ANALYZE_CORRELATIONS 分析 public
架构中所有表的列相关,即使当前不存在相关性:
=> SELECT ANALYZE_CORRELATIONS ('public.*', 'true');
ANALYZE_CORRELATIONS
----------------------
0
(1 row)
将一个表复制到另一个表。此轻量级内存函数从源表复制 DDL 及所有用户创建的投影。同时,还会复制源表的投影统计信息。因此,源表和目标表最初具有相同的定义并共享同一个存储。
完成复制操作后,源表与复制表相互独立,因此可以对一个表执行 DML 操作而不会影响另一个表。这些操作可增加两个表所需的存储总量。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
COPY_TABLE (
'[[database.]schema.]source-table',
'[[database.]schema.]target-table'
)
[database.]schema
数据库和架构。默认架构为 public
。如果指定一个数据库,它必须是当前数据库。
source‑table
目标表
如果该表不存在,Vertica 将根据源表的定义,通过调用
CREATE TABLE
包含 LIKE
和 INCLUDING PROJECTIONS
子句来创建一个表。该新表会从源表中继承所有权。有关详细信息,请参阅复制表。
非超级用户:
源表:SELECT
目标架构/表(新建): CREATE
目标表(现有):INSERT
两个表的以下属性必须完全相同:
列定义,其中包括 NULL/NOT NULL 约束
分段
分区表达式
投影数量
投影排序顺序
主键和唯一键约束。但是,不必以完全相同的方式启用键约束。
文本索引的数量和定义。
如果目标表已存在,则源表和目标表必须具有相同的访问策略。
此外,如果源表上存在访问策略,则必须满足以下条件:
两个表上的访问策略必须相同。
以下其中一项必须为真:
执行用户拥有源表。
AccessPolicyManagementSuperuserOnly
设置为 true。有关详细信息,请参阅管理访问策略。
以下限制适用于源表和目标表:
如果源分区和目标分区位于不同的存储层中,Vertica 将返回一个警告,但操作继续进行。分区仍然位于它们的现有存储层中。
如果源表包含序列,Vertica 会先将序列转换为整数,然后再将其复制到目标表。如果目标表包含自动增量、标识或命名序列列,Vertica 将取消复制并显示错误消息。
不能将以下表用作源表或目标表:
临时表
虚拟表
系统表
外部表
如果调用 COPY_TABLE 且目标表不存在,该函数将自动创建此表。在下例中,COPY_TABLE 创建目标表 public.newtable
。Vertica 还会复制与源表 public.product_dimension
关联的所有约束,外键约束除外:
=> SELECT COPY_TABLE ( 'public.product_dimension', 'public.newtable');
-[ RECORD 1 ]--------------------------------------------------
copy_table | Created table public.newtable.
Copied table public.product_dimension to public.newtable
禁止 Vertica 在运行时找到重复主键值或唯一键值的情况下传送错误消息(与未自动启用的键约束一起使用)。视作架构不定义有任何约束,执行查询。影响限定在会话范围内。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
DISABLE_DUPLICATE_KEY_ERROR();
超级用户
当您调用 DISABLE_DUPLICATE_KEY_ERROR
时,Vertica 会发出警告,通知您将忽略重复值,且结果可能会不正确。 DISABLE_DUPLICATE_KEY_ERROR
仅用于未自动启用的键约束。
=> select DISABLE_DUPLICATE_KEY_ERROR();
WARNING 3152: Duplicate values in columns marked as UNIQUE will now be ignored for the remainder of your session or until reenable_duplicate_key_error() is called
WARNING 3539: Incorrect results are possible. Please contact Vertica Support if unsure
disable_duplicate_key_error
------------------------------
Duplicate key error disabled
(1 row)
ANALYZE_CONSTRAINTS
检查 Parquet、ORC 或 Avro 格式的文件并返回可用于读取文件的 CREATE EXTERNAL TABLE AS COPY 语句。此语句可能不完整。它还可以包含更多列或名称长度超出 Vertica 支持范围的列;此函数不强制执行 Vertica 系统限制。使用它创建表之前,请始终检查输出并解决各类问题。
此函数支持 Parquet、ORC 和 Avro 格式的分区列,从输入路径推断。由于通过目录结构完成分区,所以可能不具备充足的信息来推断分区列的类型。在这种情况下,此函数显示这些列的数据类型为 UNKNOWN 并发出警告。
函数可处理大多数数据类型,包括复杂类型。如果 Vertica 不支持输入类型,则函数将发出警告。
默认情况下,函数对复杂类型使用强类型。您可以将 vertica_type_for_complex_type
参数设置为 LONG VARBINARY,将列视为灵活复杂类型。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
INFER_EXTERNAL_TABLE_DDL( path USING PARAMETERS param=value[,...] )
format
table_name
不要将架构名称作为表名的一部分;使用 table_schema
参数。
table_schema
vertica_type_for_complex_type
非超级用户:对于用户可访问的存储位置的读取权限。
在下例中,输入文件包含具有两个整数列的表的数据。可以完全推断表定义,也可以按原样使用返回的 SQL 语句。
=> SELECT INFER_EXTERNAL_TABLE_DDL('/data/orders/*.orc'
USING PARAMETERS format = 'orc', table_name = 'orders');
INFER_EXTERNAL_TABLE_DDL
--------------------------------------------------------------------------------------------------
create external table "orders" (
"id" int,
"quantity" int
) as copy from '/data/orders/*.orc' orc;
(1 row)
要在架构中创建表,请使用 table_schema
参数。不要将其添加到表名中;函数将其视为带有句点的名称,而不是架构。
以下示例显示了复杂类型的输出。您可以按原样使用定义,也可以修改 VARCHAR 大小:
=> SELECT INFER_EXTERNAL_TABLE_DDL('/data/people/*.parquet'
USING PARAMETERS format = 'parquet', table_name = 'employees');
WARNING 9311: This generated statement contains one or more varchar/varbinary columns which default to length 80
INFER_EXTERNAL_TABLE_DDL
-------------------------------------------------------------------------
create external table "employees"(
"employeeID" int,
"personal" Row(
"name" varchar,
"address" Row(
"street" varchar,
"city" varchar,
"zipcode" int
),
"taxID" int
),
"department" varchar
) as copy from '/data/people/*.parquet' parquet;
(1 row)
在下例中,输入文件的 "prods" 列中包含映射。您可以将映射读取为行数组:
=> SELECT INFER_EXTERNAL_TABLE_DDL('/data/orders.parquet'
USING PARAMETERS format='parquet', table_name='orders');
WARNING 9311: This generated statement contains one or more varchar/varbinary columns which default to length 80
INFER_EXTERNAL_TABLE_DDL
------------------------------------------------------------------------
create external table "orders"(
"orderkey" int,
"custkey" int,
"prods" Array[Row(
"key" varchar,
"value" numeric(12,2)
)],
"orderdate" date
) as copy from '/data/orders.parquet' parquet;
(1 row)
在下例中,按区域对数据进行分区。函数无法推断数据类型,报告 UNKNOWN:
=> SELECT INFER_EXTERNAL_TABLE_DDL('/data/sales/*/*
USING PARAMETERS format = 'parquet', table_name = 'sales');
WARNING 9262: This generated statement is incomplete because of one or more unknown column types.
Fix these data types before creating the table
INFER_EXTERNAL_TABLE_DDL
------------------------------------------------------------------------
create external table "sales"(
"tx_id" int,
"date" date,
"region" UNKNOWN
) as copy from '/data/sales/*/*' PARTITION COLUMNS region parquet;
(1 row)
对于 VARCHAR 和 VARBINARY 列,此函数不指定长度。这些类型的 Vertica 默认长度为 80 字节。如果数据值较长,则使用这个未经修改的表定义可能会导致数据截断。始终查看 VARCHAR 和 VARBINARY 列,以确定是否需要指定长度。如果输入文件包含以下类型的列,则此函数将发出警告:
WARNING 9311: This generated statement contains one or more varchar/varbinary columns which default to length 80
检查 Parquet、ORC、JSON 或 Avro 格式的文件,并根据其内容返回 CREATE TABLE 或 CREATE EXTERNAL TABLE 语句。
如果输入数据包含不明确或未知的数据类型,则返回的语句可能不完整。它还可以包含更多列或名称长度超出 Vertica 支持范围的列;此函数不强制执行 Vertica 系统限制。使用它创建表之前,请始终检查输出并解决各类问题。
此函数支持从输入路径推断出的分区列。由于通过目录结构完成分区,所以可能不具备充足的信息来推断分区列的类型。在这种情况下,此函数显示这些列的数据类型为 UNKNOWN 并发出警告。
函数可处理大多数数据类型,包括复杂类型。如果 Vertica 不支持输入类型,则函数将发出警告。
对于 VARCHAR 和 VARBINARY 列,此函数不指定长度。这些类型的 Vertica 默认长度为 80 字节。如果数据值较长,则使用返回且未经修改的表定义可能会导致数据截断。始终查看 VARCHAR 和 VARBINARY 列,以确定是否需要指定长度。如果输入文件包含以下类型的列,则此函数将发出警告:
WARNING 9311: This generated statement contains one or more varchar/varbinary columns which default to length 80
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
INFER_TABLE_DDL( path USING PARAMETERS param=value[,...] )
format
table_name
不要将架构名称作为表名的一部分;使用 table_schema
参数。
table_schema
table_type
默认值: “native”
with_copy_statement
默认值:false
one_line_result
默认值: false(整齐打印)
max_files
默认值: 1
max_candidates
max_candidates
,还会增加 max_files
。有关详细信息,请参阅 JSON。
默认值: 1
非超级用户:对于用户可访问的存储位置的读取权限。
与其他受支持的格式不同,JSON 不会在数据文件中嵌入架构。此函数通过检查原始数据来推断 JSON 表 DDL。由于原始数据可能不明确或不一致,因此函数对此格式采用不同的方法。
对于每个输入文件,函数循环访问记录以开发备选表定义。任何记录中显示的顶级字段都将作为列包含在其中,即使并非所有记录都使用顶级字段也是如此。如果同一字段以不同类型显示到文件中,则函数选择与观察到的所有实例一致的类型。
假设一个文件包含餐厅数据:
{
"name" : "Pizza House",
"cuisine" : "Italian",
"location_city" : [],
"chain" : true,
"hours" : [],
"menu" : [{"item" : "cheese pizza", "price" : 7.99},
{"item" : "spinach pizza", "price" : 8.99},
{"item" : "garlic bread", "price" : 4.99}]
}
{
"name" : "Sushi World",
"cuisine" : "Asian",
"location_city" : ["Pittsburgh"],
"chain" : false,
"menu" : [{"item" : "maki platter", "price" : "21.95"},
{"item" : "tuna roll", "price" : "4.95"}]
}
第一条记录包含两个空数组,因此没有足够的信息来确定元素类型。第二条记录包含其中一个数组的字符串值,因此函数可为其推断出一种 VARCHAR 类型。其他数组元素类型仍然未知。
在第一条记录中,菜单价格为数字,但在第二条记录中,菜单价格为字符串。FLOAT 和字符串都可以强制转换为 NUMERIC,因此函数返回 NUMERIC:
=> SELECT INFER_TABLE_DDL ('/data/restaurants.json'
USING PARAMETERS table_name='restaurants', format='json');
WARNING 0: This generated statement contains one or more varchar/varbinary types which default to length 80
INFER_TABLE_DDL
------------------------------------------------------------------------
Candidate matched 1/1 of total files(s):
create table "restaurants"(
"chain" bool,
"cuisine" varchar,
"hours" Array[UNKNWON],
"location_city" Array[varchar],
"menu" Array[Row(
"item" varchar,
"price" numeric
)],
"name" varchar
);
(1 row)
所有标量类型都可以强制转换为 VARCHAR,因此如果无法更明确地解决冲突(如在 NUMERIC 示例中),函数仍然可以返回类型。然而,并不总能通过这种方式对复杂类型进行解析。在下例中,文件中的记录包含相互冲突的 hours
字段定义:
{
"name" : "Sushi World",
"cuisine" : "Asian",
"location_city" : ["Pittsburgh"],
"chain" : false,
"hours" : {"open" : "11:00", "close" : "22:00" }
}
{
"name" : "Greasy Spoon",
"cuisine" : "American",
"location_city" : [],
"chain" : "false",
"hours" : {"open" : ["11:00","12:00"], "close" : ["21:00","22:00"] },
}
在第一条记录中,值为 ROW,包含两个 TIME 字段。在第二条记录中,值为 ROW,包含两个 ARRAY[TIME] 字段(代表工作日和周末时间)。这些类型相互不兼容,因此函数使用 LONG VARBINARY 推荐 灵活复杂类型:
=> SELECT INFER_TABLE_DDL ('/data/restaurants.json'
USING PARAMETERS table_name='restaurants', format='json');
WARNING 0: This generated statement contains one or more varchar/varbinary types which default to length 80
INFER_TABLE_DDL
------------------------------------------------------------------------
Candidate matched 1/1 of total files(s):
create table "restaurants"(
"chain" bool,
"cuisine" varchar,
"hours" long varbinary,
"location_city" Array[varchar],
"name" varchar
);
(1 row)
如果使用 glob 调用函数,默认读取一个文件。将 max_files
设置为更大的数字,以检查更多的数据。函数为每个文件计算一个备选表定义,返回涵盖最多文件的定义。
增加文件数量本身并不会增加函数返回的备选项数量。文件越多,函数可以考虑的备选项越多,但默认情况下,返回代表最多文件的单个备选项。要查看多个可能的表定义,还要设置 max_candidates
。将 max_candidates
设置为大于 max_files
没有任何益处。
在下例中,glob 包含两个文件,菜单列结构截然不同。在第一个文件中,菜单字段包含两个字段:
{
"name" : "Bob's pizzeria",
"cuisine" : "Italian",
"location_city" : ["Cambridge", "Pittsburgh"],
"menu" : [{"item" : "cheese pizza", "price" : 8.25},
{"item" : "spinach pizza", "price" : 10.50}]
}
在第二个文件中,一天当中不同时段的菜品有所不同:
{
"name" : "Greasy Spoon",
"cuisine" : "American",
"location_city" : [],
"menu" : [{"time" : "breakfast",
"items" :
[{"item" : "scrambled eggs", "price" : "3.99"}]
},
{"time" : "lunch",
"items" :
[{"item" : "grilled cheese", "price" : "3.95"},
{"item" : "tuna melt", "price" : "5.95"},
{"item" : "french fries", "price" : "1.99"}]}]
}
要查看两个备选项,请同时提出 max_files
和 max_candidates
:
=> SELECT INFER_TABLE_DDL ('/data/*.json'
USING PARAMETERS table_name='restaurants', format='json',
max_files=3, max_candidates=3);
WARNING 0: This generated statement contains one or more float types which might lose precision
WARNING 0: This generated statement contains one or more varchar/varbinary types which default to length 80
INFER_TABLE_DDL
------------------------------------------------------------------------
Candidate matched 1/2 of total files(s):
create table "restaurants"(
"cuisine" varchar,
"location_city" Array[varchar],
"menu" Array[Row(
"item" varchar,
"price" float
)],
"name" varchar
);
Candidate matched 1/2 of total files(s):
create table "restaurants"(
"cuisine" varchar,
"location_city" Array[varchar],
"menu" Array[Row(
"items" Array[Row(
"item" varchar,
"price" numeric
)],
"time" varchar
)],
"name" varchar
);
(1 row)
在下例中,输入路径包含具有两个整数列的表的数据。可以完全推断外部表定义,也可以按原样使用返回的 SQL 语句。函数从输入路径读取一个文件:
=> SELECT INFER_TABLE_DDL('/data/orders/*.orc'
USING PARAMETERS format = 'orc', table_name = 'orders', table_type = 'external');
INFER_TABLE_DDL
------------------------------------------------------------------------
create external table "orders" (
"id" int,
"quantity" int
) as copy from '/data/orders/*.orc' orc;
(1 row)
要在架构中创建表,请使用 table_schema
参数。不要将其添加到表名中;函数将其视为带有句点的名称,而不是架构。
以下示例显示了复杂类型的输出。您可以按原样使用定义,也可以修改 VARCHAR 大小:
=> SELECT INFER_TABLE_DDL('/data/people/*.parquet'
USING PARAMETERS format = 'parquet', table_name = 'employees');
WARNING 9311: This generated statement contains one or more varchar/varbinary columns which default to length 80
INFER_TABLE_DDL
------------------------------------------------------------------------
create table "employees"(
"employeeID" int,
"personal" Row(
"name" varchar,
"address" Row(
"street" varchar,
"city" varchar,
"zipcode" int
),
"taxID" int
),
"department" varchar
);
(1 row)
在下例中,输入文件的 "prods" 列中包含映射。您可以将映射读取为行数组:
=> SELECT INFER_TABLE_DDL('/data/orders.parquet'
USING PARAMETERS format='parquet', table_name='orders');
WARNING 9311: This generated statement contains one or more varchar/varbinary columns which default to length 80
INFER_TABLE_DDL
------------------------------------------------------------------------
create table "orders"(
"orderkey" int,
"custkey" int,
"prods" Array[Row(
"key" varchar,
"value" numeric(12,2)
)],
"orderdate" date
);
(1 row)
以下示例返回原生表定义和 COPY 语句,将表定义添加到一行,简化剪切和粘贴到脚本的过程:
=> SELECT INFER_TABLE_DDL('/data/orders/*.orc'
USING PARAMETERS format = 'orc', table_name = 'orders',
table_type = 'native', with_copy_statement = true, one_line_result=true);
INFER_TABLE_DDL
-----------------------------------------------------------------------
create table "orders" ("id" int, "quantity" int);
copy "orders" from '/data/orders/*.orc' orc;
(1 row)
在下例中,按区域对数据进行分区。函数无法推断数据类型,报告 UNKNOWN:
=> SELECT INFER_TABLE_DDL('/data/sales/*/*
USING PARAMETERS format = 'orc', table_name = 'sales', table_type = 'external');
WARNING 9262: This generated statement is incomplete because of one or more unknown column types. Fix these data types before creating the table
WARNING 9311: This generated statement contains one or more varchar/varbinary columns which default to length 80
INFER_TABLE_DDL
------------------------------------------------------------------------
create external table "sales"(
"orderkey" int,
"custkey" int,
"prodkey" Array[varchar],
"orderprices" Array[numeric(12,2)],
"orderdate" date,
"region" UNKNOWN
) as copy from '/data/sales/*/*' PARTITION COLUMNS region orc;
(1 row)
在下例中,函数读取多个 JSON 文件,这些 JSON 文件呈现 menu
列的方式有所不同:
=> SELECT INFER_TABLE_DDL ('/data/*.json'
USING PARAMETERS table_name='restaurants', format='json',
max_files=3, max_candidates=3);
WARNING 0: This generated statement contains one or more float types which might lose precision
WARNING 0: This generated statement contains one or more varchar/varbinary types which default to length 80
INFER_TABLE_DDL
------------------------------------------------------------------------
Candidate matched 1/2 of total files(s):
create table "restaurants"(
"cuisine" varchar,
"location_city" Array[varchar],
"menu" Array[Row(
"item" varchar,
"price" float
)],
"name" varchar
);
Candidate matched 1/2 of total files(s):
create table "restaurants"(
"cuisine" varchar,
"location_city" Array[varchar],
"menu" Array[Row(
"items" Array[Row(
"item" varchar,
"price" numeric
)],
"time" varchar
)],
"name" varchar
);
(1 row)
返回 AUTO_INCREMENT
/IDENTITY
列的最后一个值。如果多个会话并行加载同一个包含 AUTO_INCREMENT
/IDENTITY
列的表,则函数返回为该列生成的最后一个值。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
LAST_INSERT_ID()
表所有者
对表架构的 USAGE 权限
从物理存储空间中永久移除已删除的数据,以便可以重新使用磁盘空间。您可以清除包含 Ancient History Mark 时期之前的历史数据。
清除指定表的所有投影。不能使用此函数清除临时表。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
PURGE_TABLE ( '[[database.]schema.]table' )
[database.]schema
数据库和架构。默认架构为 public
。如果指定一个数据库,它必须是当前数据库。
表所有者
对架构的 USAGE 权限
以下示例清理了 Vmart 架构中的商店销售事实表的所有投影:
=> SELECT PURGE_TABLE('store.store_sales_fact');
同步重新平衡指定表中的数据。
再平衡操作执行以下任务:
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
REBALANCE_TABLE('[[database.]schema.]table‑name')
数据库和架构。默认架构为 public
。如果指定一个数据库,它必须是当前数据库。
超级用户
执行以下任务后,重新平衡很有用,甚至十分必要:
在准备从群集移除一个或多个节点时,将其标记为临时节点。
向群集添加一个或多个节点,以便 Vertica 可以使用数据填充空节点。
更改弹性群集的比例因子,该比例因子可确定用于跨数据库存储投影的存储容器的数目。
设置控制节点大小或重新调整大型群集布局上的控制节点
向容错组添加节点或从中移除节点。
以下命令显示如何重新平衡指定表上的数据。
=> SELECT REBALANCE_TABLE('online_sales.online_sales_fact');
REBALANCE_TABLE
-------------------
REBALANCED
(1 row)
通过逆转
DISABLE_DUPLICATE_KEY_ERROR
的影响来恢复错误报告的默认行为。影响限定在会话范围内。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
REENABLE_DUPLICATE_KEY_ERROR();
超级用户
=> SELECT REENABLE_DUPLICATE_KEY_ERROR();
REENABLE_DUPLICATE_KEY_ERROR
------------------------------
Duplicate key error enabled
(1 row)
ANALYZE_CONSTRAINTS