使用PostgreSQL Anonymizer时遭遇双引号转义错误求助
PostgreSQL Anonymizer 执行anon.anonymize_database()时出现双引号转义错误
操作步骤
- 步骤1:设置字段掩码规则
SECURITY LABEL FOR anon ON COLUMN "Users"."Email" IS 'MASKED WITH FUNCTION anon.fake_email()'; - 步骤2:执行数据库匿名化操作
SELECT anon.anonymize_database();
错误信息
执行步骤2后触发语法错误,具体报错如下:
ERROR: syntax error at or near "Email" LINE 1: UPDATE public. "Users" SET "\"Email\"" = CAST (anon.fake_email... ^ QUERY: UPDATE public. "Users" SET "\"Email\"" = CAST (anon.fake_email() AS text) CONTEXT: SQL function "anonymize_database" statement 1
环境信息
- Ubuntu 22.04
- PostgreSQL 15.10
- postgresql_anonymizer_15
解决方法
这个错误是由于anon.anonymize_database()函数在生成UPDATE语句时,对已用双引号包裹的列名进行了重复转义,导致列名变成"\"Email\"",违反SQL语法规则。可通过以下方式解决:
- 简化安全标签语句(推荐)
如果表名和列名不是大小写敏感或包含特殊字符,去掉双引号重新执行步骤1:
SECURITY LABEL FOR anon ON COLUMN Users.Email IS 'MASKED WITH FUNCTION anon.fake_email()';
之后再调用anon.anonymize_database()即可正常执行。
- 手动执行UPDATE语句替代自动函数
如果必须保留双引号(比如表/列名是大小写混合),跳过anon.anonymize_database(),直接手动执行匿名化更新:
UPDATE public."Users" SET "Email" = CAST(anon.fake_email() AS text);
- 升级postgresql_anonymizer版本
该问题可能是特定版本的已知bug,建议升级到最新稳定版的postgresql_anonymizer,新版本通常会修复这类转义逻辑问题。
内容的提问来源于stack exchange,提问作者haxkd
相关产品推荐
相关产品推荐

