AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[constraint](dba)

Martin Hope
user2959071
Asked: 2022-07-13 15:19:06 +0800 CST

何时检查 IMMEDIATE 约束以及 Postgres 中的“语句”到底是什么?

  • 4

我目前对立即约束检查的确切时间感到困惑。希望以下示例能解决我的困惑:

create table a (
  id int primary key
);

create table b (
  id int primary key,
  a_id int not null references a
);

/* violates foreign key constraint "b_a_id_fkey" */
with t1 as (insert into b values (100, 200) returning id, a_id)
  select * from t1;

/* ERROR: expensive_exception_thrower */
with t1 as (insert into b values (100, 200) returning id, a_id)
  select * from t1 where expensive_exception_thrower(t1.a_id) = true;

在第二个查询中,尽管引用了 t1,但expensive_exception_thrower将首先抛出其异常,这导致 fkey 异常被吞噬。当然,有一些解决方法,但是当 Postgres 手册说在每个语句之后立即检查 IMMEDIATE 约束时,我想了解“语句”的确切定义。手册使用术语“语句”的方式表明 with 子句是一个语句,或者至少是“子语句”。

这是 PG 版本 14.3。

postgresql constraint
  • 1 个回答
  • 455 Views
Martin Hope
Joey Yi Zhao
Asked: 2022-02-22 14:18:25 +0800 CST

什么约束不能写成表约束?

  • 0

我正在阅读 Postgres 7.3文档以向 PostgreSQL 表添加约束。

它说:

要添加不能写为表约束的非空约束,请使用以下语法:

ALTER TABLE 产品 ALTER COLUMN product_no SET NOT NULL;

约束会被立即检查,所以表数据必须满足约束才能添加。

我不明白“不能写成表约束”是什么意思?

什么是表约束?什么约束不立即检查?

postgresql constraint
  • 1 个回答
  • 33 Views
Martin Hope
Robert W
Asked: 2021-12-03 19:01:12 +0800 CST

如何防止具有特定属性的行在级联中被删除?

  • 0

我有下表

CREATE TABLE IF NOT EXISTS node (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  type TEXT CHECK(type IN ("DIRECTORY", "EXECUTABLE", "DOCUMENT")) NOT NULL,
  siblingOrder INTEGER NOT NULL,
  parentId INTEGER,
  protected INTEGER NOT NULL, 
  UNIQUE (parentId, siblingOrder) ON CONFLICT ABORT,
  FOREIGN KEY(parentId) REFERENCES node(id),
  CONSTRAINT fk_parent 
    FOREIGN KEY (parentId)
    REFERENCES node(id)
    ON DELETE CASCADE
);

我插入以下数据

INSERT INTO node (id, name, type, siblingOrder, parentId, protected) 
VALUES 
(1, "DESKTOP", "DIRECTORY", 0, null, 1),
(2, "sys", "DIRECTORY", 1, 1, 0),
(3, "dont delete me", "DIRECTORY", 2, 2, 1);

我运行以下命令

DELETE FROM node 
WHERE id=2;

如何防止删除protected值为 的记录TRUE?(在这种情况下,我不希望删除“不要删除我”记录。

sqlite constraint
  • 1 个回答
  • 45 Views
Martin Hope
cdalxndr
Asked: 2021-08-14 08:37:14 +0800 CST

如何生成约束sql?

  • -1

我正在寻找一种可以SQL在选择约束时生成创建 sql 的方法,例如 PgAdmin 的选项卡。(pg admin是怎么做的?)

我想实现一个通用方法,可以在处理后删除和重新创建外键约束。

postgresql constraint
  • 1 个回答
  • 74 Views
Martin Hope
Robert Elliot
Asked: 2021-03-06 05:24:43 +0800 CST

如何在同一个表的列之间定义一对多约束?

  • 1

我正在 PostgreSQL 中创建一个 IDs 表来表示多个外部 ID 之间的关系 - 称它们为a,b和c.

我碰巧知道外国ID之间有一对多的关系:

a 1..* b b 1..* c

a我想将它们表示为一个表(见下文),但在& b、 & 和 之间b强制执行一对多不变量c。

那可能吗?

示例:以下插入是非法的:

PK 一个 b C 原因
p15 a1 b11 c111 c111 已经存在
p16 a1 b21 c213 a2 的 b21 已存在
p17 a2 b11 c214 a1 的 b11 已存在

给定以下合法表格:

PK 一个 b C
p1 a1 b11 c111
p2 a1 b11 c112
p3 a1 b12 c121
p4 a1 b12 c122
p5 a2 b21 c211
p6 a2 b21 c212
p7 a2 b22 c221
p8 a2 b22 c222
p9 无效的 b31 c311
p10 a3 无效的 c312
p11 a3 b31 无效的
p12 无效的 无效的 c314
p13 无效的 b31 无效的
p14 a3 无效的 无效的
postgresql constraint
  • 1 个回答
  • 148 Views
Martin Hope
Alex
Asked: 2020-07-07 09:08:47 +0800 CST

CHECK CONSTRAINT 不能识别违反约束,但 DBCC CHECKCONSTRAINTS 可以

  • -2

我有一个充满数据的表,并且我对该表中的一个字段设置了一个约束,以确保 2 个字段的总数等于第 3 个字段。例如:

ALTER TABLE [dbo].[Table1]
WITH NOCHECK ADD CONSTRAINT [CHK_TOTALS] CHECK ([Field3] = [Field1] + [Field2])

如果我再检查这个约束:

ALTER TABLE [dbo].[Table1]
CHECK CONSTRAINT [CHK_TOTALS]

没有返回错误,操作成功执行,因此好像所有行都满足约束。

但是,如果我随后执行DBCC CHECKCONSTRAINTS([Table1])了几行,则返回约束CHK_TOTALS,表明存在多个违反约束的行为。

我检查了数据,可以确认[Field1] + [Field2] 并非所有行的总数[Field3]。

为什么第一次检查没有识别这些,而是​​使用了DBCC CHECKCONSTRAINTS呢?

ssms constraint
  • 1 个回答
  • 31 Views
Martin Hope
John Bachir
Asked: 2020-06-02 06:31:58 +0800 CST

为什么 ADD CONSTRAINT ... NOT VALID 需要很长时间?

  • 0

我在这样的一些列中添加了 NOT NULL 约束,期望该命令非常快,因为NOT VALID. 但是,它花了大约 60-100 秒,并且似乎一直锁定表(基于在那段时间其他事情失败)。这是在一个大约有 8,600,000 行的表上。为什么会这样?执行 4 个命令而不是 1 个命令会更好吗?

Postgres 12

ALTER TABLE my_table
  ADD CONSTRAINT my_table_column1_not_null CHECK (column1 IS NOT NULL) NOT VALID,
  ADD CONSTRAINT my_table_column2_not_null CHECK (column2 IS NOT NULL) NOT VALID,
  ADD CONSTRAINT my_table_column3_not_null CHECK (column3 IS NOT NULL) NOT VALID,
  ADD CONSTRAINT my_table_column4_not_null CHECK (column4 IS NOT NULL) NOT VALID;
postgresql constraint
  • 1 个回答
  • 1511 Views
Martin Hope
No Name
Asked: 2020-05-03 01:49:25 +0800 CST

如何在 postgresSql 中查看 cloumn 的约束?

  • 0

我应用了一个约束,但忘记了它的名字。现在我想使用ALTER TABLE [TABLENAME] DROP CONSTRAINT [CONSTRAINTNAME]. 如果有办法从应该工作的列中删除所有约束。我不能使用 psql 命令。

postgresql constraint
  • 1 个回答
  • 723 Views
Martin Hope
zellez
Asked: 2020-04-06 15:46:16 +0800 CST

向现有表列添加约束

  • 1

我有一张像这样对它们没有任何约束的表

CREATE TABLE SomeTable
(
   Id int NOT NULL,
   Type varchar(50),
)

insert into SomeTable values (12,'Exchange-Student');

现在我知道我可以做alterintoadd constraint然后checkif type 是我想要的值。我只是不知道如何正确实现它。

例如,假设我希望它仅限于3types 'Exchange-Studen','Independent student'并且'program Student'

我将如何实施?

mysql constraint
  • 1 个回答
  • 50 Views
Martin Hope
Ebony Maw
Asked: 2020-03-19 04:57:25 +0800 CST

向 Oracle 表上的列添加约束,以便只允许正值

  • 0

我不允许删除表格或删除列。任务是可能通过使用 ALTER 语句向列添加约束,以便它不允许任何负数。这可能吗?

我尝试了以下方法:

SQL> alter table SPEND_PLAN_DETAIL_VALUE modify (SP_DETAIL_VALUE_ID CHECK (SP_DETAIL_VALUE_ID > 0));

但这不起作用。

oracle constraint
  • 1 个回答
  • 1020 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve