小编kei*_*rth的帖子

PostgreSQL 自定义操作符 UUID 到 varchar

我有一个相当复杂的 Postgres 数据库,其中许多 UUID 字段被错误地存储为 VARCHAR。我想逐步迁移它们,但不幸的是,这样做打破了我的所有观点,因为 Postgres 没有内置的varchar = uuid. 而是重写我的所有视图或尝试一次大规模迁移,我想临时创建一个 uuid = varchar 运算符,直到迁移完成。

我以前从未创建过自定义运算符,并且我在下面的尝试不起作用:

CREATE OR REPLACE FUNCTION uuid_equal_varchar (varchar, uuid)
RETURNS boolean AS 'SELECT $1::text = $2::text;' LANGUAGE sql IMMUTABLE;

CREATE OPERATOR = (
    leftarg = character varying,
    rightarg = uuid,
    procedure = uuid_equal_varchar,
    commutator = =
);
Run Code Online (Sandbox Code Playgroud)

然而,这个运营商打破了一切。包括一个简单的 varchar = varchar 比较(见下文):

SELECT * FROM test WHERE pk_test = '123';
ERROR:  invalid input syntax for uuid: "123"
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释我做错了什么吗?我是否试图尝试不可能的事情?

postgresql datatypes cast operator uuid

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

标签 统计

cast ×1

datatypes ×1

operator ×1

postgresql ×1

uuid ×1