Pau*_*-AG 4 sql postgresql where-clause sql-insert
我的 Postgres 12 数据库架构中有声明:
CREATE TYPE something_e AS ENUM('OPEN', 'CLOSE');
CREATE DOMAIN something_t AS something_e NOT NULL DEFAULT 'OPEN';
CREATE TABLE xxx (
...
something something_t,
...
);
Run Code Online (Sandbox Code Playgroud)
看来 INSERT 工作得很好。但 select - 不会:
INSERT INTO yyy (...) VALUES (..., (SELECT ID FROM xxx WHERE ... AND something='OPEN'));
Run Code Online (Sandbox Code Playgroud)
这里我得到一个错误:
“错误:运算符不存在:something_t = 未知”。
我尝试将类型转换为something_e, tosomething_t但::没有成功。我什至收到类似“操作符不存在:something_t = Something_t”之类的错误!我最初的想法是减少代码的重复,因此something_t基于 enum 引入这个新域something_e,但是现在如何使用这样的标准进行选择?INSERT 似乎something_t自动将“OPEN”字符串转换为...这种情况的正确语法是什么?
您不能直接将字符串与自定义类型的值进行比较:
select * from xxx where something = 'OPEN';
-- ERROR: operator does not exist: something_t = unknown
Run Code Online (Sandbox Code Playgroud)
您不能在自定义类型上使用相等运算符:
select * from xxx where something = 'OPEN'::something_t;
-- ERROR: operator does not exist: something_t = something_t
Run Code Online (Sandbox Code Playgroud)
但是,您可以将类型值转换为字符串,然后进行比较:
select * from xxx where something::text = 'OPEN'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2167 次 |
| 最近记录: |