sql - Postgres : overload/add comparison operators to domain

标签 sql postgresql enums dns

我有一列应该有 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/

相关文章:

围绕枚举的 Pythonic 方式

java - 我应该使用哪种设计模式在 java 中构建 GUI 以及以下场景?

c# - 如何要求枚举作为强类型参数?

sql - 在 SQL Azure 中安全地更改列数据类型

sql - 如何创建用增量填充字段的 SQL 函数

Sql 范围组开始和结束 ID

postgresql - psql\copy 中的变量替换

sql - 查找从给定日期算起当月剩余天数

php - MySQL:多行结果 VS 单行结果

sql - 如何使用带有候选发布键的表编写查询?