小编Bla*_*nen的帖子

Postgres SQL Exclusive OR(XOR)CHECK CONSTRAINT,有可能吗?

是否可以制作XOR CHECK CONSTRAINT?

我是在我刚刚制作的测试表上做的,它叫做test并有3列:

  • id,bigint
  • a,bigint
  • b,bigint

我为此做了一个检查约束:

(a IS NOT NULL AND b = NULL) OR (b IS NOT NULL AND a = NULL)
Run Code Online (Sandbox Code Playgroud)

这显然适用于MSSQL

我通过这样做测试了它:

INSERT INTO public.test(
    id, a, b)
    VALUES (1, 1, 1);
Run Code Online (Sandbox Code Playgroud)

哪个应该失败,因为它在OR的任何一侧都没有评估为TRUE.但是,插入就好了.

当我看到postgres实际存储为约束时,我得到了这个:

(a IS NOT NULL AND b = NULL::bigint OR b IS NOT NULL AND a = NULL::bigint)
Run Code Online (Sandbox Code Playgroud)

我听说AND先于OR,所以即使这样也应该有效.

有人有解决方案吗?优选地,也可以具有三列或更多列?我知道那些可能会更复杂.

编辑:改变

= NULL
Run Code Online (Sandbox Code Playgroud)

至

IS NULL
Run Code Online (Sandbox Code Playgroud)

给我吗:

ERROR:  cannot cast type boolean to bigint
Run Code Online (Sandbox Code Playgroud)

sql postgresql constraints xor

7
推荐指数
3
解决办法
8445
查看次数

在 postgres SQL 中使用 OR 进行检查约束

我想知道是否可以先评估 CHECK CONSTRAINT 中的某些条件,然后对另一个表达式进行 OR 运算。

我的情况:

4 表:\

  • main,它是一个 id、一个类型变量(让它成为 0-2 的 smallint)和下表的外键:
  • a、b、c,只包含一个id

我想做一个检查约束,它基本上遵循以下逻辑:

if main.type = 0:
    main.a != NULL
    main.b = NULL
    main.c = NULL
elif main.type = 2:
    main.a = NULL
    main.b = NULL
    main.c != NULL
Run Code Online (Sandbox Code Playgroud)

如果 type = 1 我不在乎填写什么。

我尝试像这样做一个检查约束:

CHECK((main.type = 0 AND main.a != NULL AND main.b = NULL AND main.c = NULL) OR
(main.type = 2 AND main.a = NULL AND main.b = NULL AND main.c != NULL))
Run Code Online (Sandbox Code Playgroud)

问题是在应用此约束后,内括号会被删除/忽略,这意味着它几乎变得无意义并且不起作用。 …

sql postgresql constraints

5
推荐指数
1
解决办法
3745
查看次数

在Windows 8.1上使用Django的manage.py runserver出错

我无法在任何地方找到这个exitcode,但希望你们中的一个可以帮助我或让我知道这是否是python/Django中的错误.

无论如何,首先是这里的堆栈跟踪:

    Traceback (most recent call last):
  File "C:\Sitezooi\SiteTest\manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "C:\Program Files\Python\lib\site-packages\django\core\management\__init_
_.py", line 385, in execute_from_command_line
    utility.execute()
  File "C:\Program Files\Python\lib\site-packages\django\core\management\__init_
_.py", line 377, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Program Files\Python\lib\site-packages\django\core\management\base.py
", line 288, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "C:\Program Files\Python\lib\site-packages\django\core\management\base.py
", line 338, in execute
    output = self.handle(*args, **options)
  File "C:\Program Files\Python\lib\site-packages\django\core\management\command
s\runserver.py", line 83, in handle
    self.run(*args, **options)
  File "C:\Program Files\Python\lib\site-packages\django\core\management\command
s\runserver.py", line 92, in run
    autoreload.main(self.inner_run, args, options)
  File "C:\Program Files\Python\lib\site-packages\django\utils\autoreload.py", l
ine …
Run Code Online (Sandbox Code Playgroud)

python windows django mbcs

3
推荐指数
1
解决办法
3238
查看次数

标签 统计

constraints ×2

postgresql ×2

sql ×2

django ×1

mbcs ×1

python ×1

windows ×1

xor ×1