Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Postgres:check文本数组在select语句的where子句中具有可强制转换为域类型的元素_Postgresql - Fatal编程技术网

Postgresql Postgres:check文本数组在select语句的where子句中具有可强制转换为域类型的元素

Postgresql Postgres:check文本数组在select语句的where子句中具有可强制转换为域类型的元素,postgresql,Postgresql,假设我已经定义了带有检查约束的域,并且我有以下查询: SELECT pm.name, ps.name, pm.id, ps.id FROM pylon_modules pm INNER JOIN pylon_symbols ps ON pm.id = ps.module_id WHERE pm.name in ('Test','test') and ps.name in ('bang'); where子句中使用的符号最简单的转换方式是什么?我需要断言它们与域类型

假设我已经定义了带有检查约束的域,并且我有以下查询:

SELECT pm.name, ps.name, pm.id, ps.id 
FROM 
    pylon_modules pm
    INNER JOIN 
    pylon_symbols ps ON pm.id = ps.module_id
WHERE pm.name  in ('Test','test') and ps.name in ('bang');
where子句中使用的符号最简单的转换方式是什么?我需要断言它们与域类型匹配

上面的“测试”不是有效的模块名称

我可以设置一个存储过程,但查询太简单了,我宁愿准备它

如果使用存储过程,是否必须创建域类型的数组版本


有,但它要求强制转换目标为数组类型

以下操作可以实现此目的,域约束冲突将触发错误:


创建或替换函数解析_符号(模块文本[],符号文本[])
返回表(
moduleName VARCHAR(16),
symbolName VARCHAR(16),
moduleId INT,
符号整数
)作为$body$
选择pm.name、ps.name、pm.id、ps.id
来自塔架模块pm
pm.id=ps.module\u id上的内部连接塔架符号ps
其中pm.name(选择unest(模块)::public.module_name)和
ps.name IN(选择unnest(符号)::public.element\u name)
$body$LANGUAGE-sql;