woo*_*ie1 12 postgresql constraint
嗨,我似乎无法在 postgreSQL 中按照我期望的方式工作。在 pgadmin 中,我执行以下 SQL 查询。
-- Check: "TypeCheck"
-- ALTER TABLE "ComLog" DROP CONSTRAINT "TypeCheck";
ALTER TABLE "ComLog"
ADD CONSTRAINT "TypeCheck" CHECK ("Type" SIMILAR TO 'email|post|IRL|minutes');
COMMENT ON CONSTRAINT "TypeCheck" ON "ComLog" IS 'One of email|post|IRL|minutes';
Run Code Online (Sandbox Code Playgroud)
执行时将转换为。
-- Check: "TypeCheck"
-- ALTER TABLE "ComLog" DROP CONSTRAINT "TypeCheck";
ALTER TABLE "ComLog"
ADD CONSTRAINT "TypeCheck" CHECK ("Type" ~ similar_escape('email|post|IRL|minutes'::text, NULL::text));
COMMENT ON CONSTRAINT "TypeCheck" ON "ComLog" IS 'One of email|post|IRL|minutes';
Run Code Online (Sandbox Code Playgroud)
我希望这会将我对 Types 列的输入限制为电子邮件帖子 IRL 或分钟之一。但是,当输入表数据时,当我输入这些类型之一时,此约束会失败。Types 列是字符类型。有谁知道如何解决这一问题。谢谢。
Chr*_*ers 16
将您的约束更改为
CHECK (type IN ('email','post','IRL','minutes'))
Run Code Online (Sandbox Code Playgroud)
这将由解析器转换为:
CHECK (type = ANY( ARRAY['email','post','IRL','minutes']))
Run Code Online (Sandbox Code Playgroud)
那应该做你正在看的。
但是我想知道这样做是否会更好:
CREATE TABLE comlog_types (
type text
);
Run Code Online (Sandbox Code Playgroud)
然后添加一个外键来强制约束。这将使将来更容易添加类型。
| 归档时间: |
|
| 查看次数: |
5581 次 |
| 最近记录: |