我有一列应该有 3 个可能的值(例如“A”、“B”、“C”)。 对于此类事情通常使用枚举,但由于我的数据库中的许多表都会有这样的列,因此我想为类型定义一个默认值 ('C'),表示该枚举。
(据我所知,没有任何额外的定义,我需要这样写:
%COLUMN% %ENUM_TYPE% NOT NULL DEFAULT enum_first(null::%ENUM_TYPE%),
每次我需要这样的枚举时)
CREATE TYPE ...
语句不允许定义默认值,但 CREATE DOMAIN ...
可以。
我尝试了一个小技巧:CREATE TYPE zzz_enum AS ENUM (...); CREATE DOMAIN zzz AS zzz_enum DEFAULT 'A';
,但查询与 %zzz column% = 'A'
的比较会导致错误:
... 运算符 %zzz% = undefined ...
我如何“手动”定义域的比较运算符或创建自定义类型,这将:
- 有一个可能值的列表,我可以通过查询得到这些值
- 将这些值之一作为默认值
- 作为一个标识符,我可以像表定义中的任何常规 SQL 类型一样使用它
提前致谢!
最佳答案
这应该行得通,但行不通。我认为这是一个错误。
关注此处的讨论:http://archives.postgresql.org/pgsql-bugs/2011-01/msg00082.php
关于sql - Postgres : overload/add comparison operators to domain,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4659217/