- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Postgres 10 中,我声明了以下内容:
create table test_abc (
pk integer not null,
id integer not NULL,
id2 integer not null,
PRIMARY KEY (pk)
);
CREATE UNIQUE INDEX test_abc_ids ON test_abc(id,id2);
create table test_def (
id integer not null,
abc_id integer,
abc_id2 integer,
PRIMARY KEY (id),
FOREIGN KEY (abc_id,abc_id2) references test_abc(id,id2)
);
SELECT unique_constraint_catalog, unique_constraint_schema, unique_constraint_name
FROM information_schema.referential_constraints r
WHERE r.constraint_name = 'test_def_abc_id_fkey'
----------------------
NULL NULL NULL
unique_constraint_*
列有一个空值。
name of the [object] that contains the unique or primary key constraint that the foreign key constraint references (always the current database)
test_abc
上声明了唯一索引table 是一个唯一的约束(否则我将无法声明 FK 开始),那么为什么这些列是空的?
referential_constraints
使用一些连接来获取有关我的外键引用的列的信息,但是这样我就错过了所有使用索引设置唯一约束的那些。
最佳答案
测试设置
您假设约束名称 test_def_abc_id_fkey
,您在 Postgres 11 或更早版本中设置的默认名称。但值得注意的是,Postgres 12 的默认名称已得到改进,相同的设置导致 test_def_abc_id_abc_id2_fkey
. The release notes for Postgres 12:
Use all key columns' names when selecting default constraint names for foreign keys (Peter Eisentraut)
Previously, only the first column name was included in the constraint name, resulting in ambiguity for multi-column foreign keys.
test_def_abc_fkey
对于 FK 约束以避免混淆:
CREATE TABLE test_abc (
pk int PRIMARY KEY
, id int NOT NULL
, id2 int NOT NULL
);
CREATE UNIQUE INDEX test_abc_ids ON test_abc(id,id2);
CREATE TABLE test_def (
id int PRIMARY KEY
, abc_id int
, abc_id2 int
, CONSTRAINT test_def_abc_fkey -- !
FOREIGN KEY (abc_id,abc_id2) REFERENCES test_abc(id,id2)
);
SELECT *
FROM information_schema.referential_constraints
WHERE constraint_name = 'test_def_abc_fkey'; -- unequivocal name
unique_constraint_catalog
,
unique_constraint_schema
和
unique_constraint_name
是
NULL
.
... the unique or primary key constraint that the foreign key constraint references
UNIQUE
constraint ,只是一个
UNIQUE
index .一个
UNIQUE
约束是使用
UNIQUE
实现的Postgres 中的索引。约束由 SQL 标准定义,索引是实现细节。有一些差异,就像你发现的那样。有关的:
UNIQUE
相同的测试约束按预期显示数据:
key_column_usage
.它的最后一列描述为:
position_in_unique_constraint
... For a foreign-key constraint, ordinal position of the referenced column within its unique constraint (count starts at 1); otherwise null
SELECT *
FROM information_schema.key_column_usage
WHERE constraint_name = 'test_def_abc_fkey';
PRIMARY KEY
或
UNIQUE
创建
FOREIGN KEY
需要约束约束:
A foreign key must reference columns that either are a primary key or form a unique constraint. This means that the referenced columns always have an index (the one underlying the primary key or unique constraint); so checks on whether a referencing row has a match will be efficient.
I'm using the
referential_constraints
with some joins to get information about the columns referenced by my foreign keys, but this way I'm missing all those where the unique constraint is set with an index.
SELECT c.conname
, c.conrelid::regclass AS fk_table, k1.fk_columns
, c.confrelid::regclass AS ref_table, k2.ref_key_columns
FROM pg_catalog.pg_constraint c
LEFT JOIN LATERAL (
SELECT ARRAY (
SELECT a.attname
FROM pg_catalog.pg_attribute a
, unnest(c.conkey) WITH ORDINALITY AS k(attnum, ord)
WHERE a.attrelid = c.conrelid
AND a.attnum = k.attnum
ORDER BY k.ord
) AS fk_columns
) k1 ON true
LEFT JOIN LATERAL (
SELECT ARRAY (
SELECT a.attname
FROM pg_catalog.pg_attribute a
, unnest(c.confkey) WITH ORDINALITY AS k(attnum, ord)
WHERE a.attrelid = c.confrelid
AND a.attnum = k.attnum
ORDER BY k.ord
) AS ref_key_columns
) k2 ON true
WHERE conname = 'test_def_abc_fkey';
关于sql - information_schema 中referential_constraints.unique_constraint* 列的NULL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61249732/
INFORMATION_SCHEMA.TABLES 或 INFORMATION_SCHEMA.COLUMNS 仅适用于指定数据库。 是否可以使用 INFORMATION_SCHEMA 查询服务器上所有
我正在寻找一种方法来备份 MySQL 上的所有数据库。我写了一个运行 mysqldump 的批处理文件,它工作正常。不幸的是,我使用的是 MySQL 5.0,无法升级到包含 mysqldump 中的
我有以下选择: SELECT col.table_name, col.column_name, col.ordinal_position, col.is_nullable, col.data_
伙计们,我对存储过程还很陌生。谁能指导我如何将以下简单的 sql 查询放入存储过程中 $tables = mysql_query("SELECT TABLE_NAME FROM information
我正在尝试使用 INFORMATION_SCHEMA 修剪数据库中的表。为了测试 DELETE,我使用 SELECT 来查看数据是否正确返回。我想根据数据库是否存在从 master.company 中
我创建了一个虚拟表: CREATE TABLE `lock_test` ( `name` varchar(32) NOT NULL, PRIMARY KEY (`name`) ) ENGINE
我成功地运行了一个查询,选择了 information_schema 中一个表的列名,但是如果我在存储过程中运行相同的查询以将其与游标一起使用,那么 information_schema 是未知的。谁
使用 php 5.6.18 和 MySQL 5.7.11 运行 WAMP 本地主机服务器 在我现在正在进行的项目中,我需要从 information_schema 中获取一些列数据。COLUMNS 表
我需要获取服务器上所有数据库中所有表的列表。 我找到了 2 种方法来做到这一点。 1).执行 SHOW FULL TABLES from WHERE table_type = 'BASE TABLE
我长期以来一直在 MS SQL 中使用 INFORMATION_SCHEMA.COLUMNS,并且是我最好的 friend 之一。我的公司正在将其平台转换为 Netezza。 Netezza 中是否有
我在 mysql 中有一个数据库。 但是当我登录 phpMyAdmin 时,它显示了另一个名为 information_schema 的数据库。 该数据库是否始终与一个数据库一起存在? 我的意思是说
我尝试在现有表上创建外键。 FK 应引用包含在 INFORMATION:SCHEMA 中的表上的列。 但这似乎不可能。 是这样吗? 更新 这是我执行的(作为 super 用户): 更改表 MY_TAB
我正在尝试测试给定的默认约束是否存在。我不想使用 sysobjects 表,而是使用更标准的 INFORMATION_SCHEMA。 我之前用它来检查表和主键约束,但我在任何地方都没有看到默认约束。
我们编写的应用程序之一使用 INFORMATION_SCHEMA.COLUMNS 表来获取列详细信息。我们使用该信息为我们数据库中可用的不同表创建动态插入脚本。 SELECT COLUMN_NAME
我有一个表成员。我想使用自动增量创建一个用户 ID。我尝试使用以下方法: SET new.user_id = CONCAT(new.name, LPAD((SELECT AUTO_INCREMENT
只是测试一些代码,尝试将所有触发器保存在数据库中然后重新创建它们 drop table if exists triggertemp; create table triggertemp like inf
我有一个表,其索引由表中的三列组成。 有什么方法可以在 information_schema 中找到它,还是它只会显示三个单独的索引? 最佳答案 感谢 Radek Postolowicz 的 stee
我正在尝试选择除一列之外的所有列,所以我使用的是: select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME='repor
我已经安装了WAMP server2.2。安装顺利完成。但是当我尝试访问 phpmyadmin 时。它给出了错误。我从/wamp/apps/phpmyadmin3.5.1/conf.inc.php 更
我想显示具有table_schema='foo'(数据库名称)的每个表的索引。 mysql> show index from table_name from information_schema.ta
我是一名优秀的程序员,十分优秀!