使用postgresql-anonymizer的anonymize_table函数报错:column "Users" does not exist
解决postgresql-anonymizer调用anon.anonymize_table报错“column 'Users' does not exist”的问题
你遇到的问题核心是PostgreSQL的标识符大小写规则加上函数参数解析细节导致的。
原因分析
PostgreSQL默认会把不带双引号的标识符(比如表名、列名)自动转成小写。你用/dt看到的是public | Users | table,说明这个表是用双引号创建的(比如CREATE TABLE "Users" (...)),属于大小写敏感的表名。但你调用anon.anonymize_table('Users')时,函数内部解析这个字符串时,会把它当作未加双引号的标识符,自动转成users,而你数据库里根本没有小写的users表,所以报错说“column 'Users' does not exist”(这里的错误提示有点误导,实际是找不到对应表)。
解决方法
试试下面几种方式:
- 传递带双引号的完整标识符字符串
把表名用双引号包裹,同时带上schema(避免默认schema不一致的问题),作为参数传给函数:
SELECT anon.anonymize_table('"public"."Users"');
- 分开传入schema和表名参数
如果你的postgresql-anonymizer版本支持双参数的anonymize_table(多数新版本都支持),直接拆分schema和表名传递,这样更清晰:
SELECT anon.anonymize_table('public', 'Users');
- 先验证表的可访问性
先执行SELECT * FROM "Users";,如果能正常返回数据,说明确实是大小写引用的问题,用上面两种方法就能解决。
内容的提问来源于stack exchange,提问作者Todd Drinkwater
相关产品推荐
相关产品推荐

