有没有一种方法可以重写postgresql中bytea的内置操作符?

jecbmhm3  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(400)

我已经创建了用于覆盖内置(bytea,bytea)操作符的默认行为的操作符。这是允许的吗?我需要这个来覆盖数据库中自定义编码二进制数据的比较。

CREATE OPERATOR = (
    LEFTARG = bytea,
    RIGHTARG = bytea,
    COMMUTATOR = =,
    NEGATOR = !=,
    PROCEDURE = fn_enc_eq,
    HASHES, MERGES
    );

CREATE OPERATOR != (
    LEFTARG = bytea,
    RIGHTARG = bytea,
    COMMUTATOR = =,
    NEGATOR = !=,
    PROCEDURE = fn_enc_neq,
    HASHES, MERGES
    );

CREATE OPERATOR >= (
    LEFTARG = bytea,
    RIGHTARG = bytea,
    PROCEDURE = fn_enc_gte,
    HASHES, MERGES
    );

CREATE OPERATOR > (
    LEFTARG = bytea,
    RIGHTARG = bytea,
    PROCEDURE = fn_enc_gt,
    HASHES, MERGES
    );

CREATE OPERATOR <= (
    LEFTARG = bytea,
    RIGHTARG = bytea,
    PROCEDURE = fn_enc_lte,
    HASHES, MERGES
    );

CREATE OPERATOR < (
    LEFTARG = bytea,
    RIGHTARG = bytea,
    PROCEDURE = fn_enc_lt,
    HASHES, MERGES
    );
ar5n3qh5

ar5n3qh51#

您当然可以定义这些运算符,但接下来需要设置 search_path 因此,您创建运算符的模式将包含在 pg_catalog ,例如:

SET search_path = operatorschema, pg_catalog, appschema;

注意,这并不是你想要的任何地方都有效。例如,如果您计划在 bytea (奇怪的想法),这将使用原始运算符。您必须为此定义一个自定义操作符类。
而不是滥用职权 bytea ,定义自己的数据类型会更干净、更好。

相关问题