PostgreSQL中无法查询指定列的技术求助
PostgreSQL查询指定列报错的解决方法
问题原因
从报错提示和select *的输出来看,你的test表中ip列的列名包含了不可见的特殊字符(比如Unicode行分隔符
)。虽然select *能正常显示列数据,但单独指定列名时,PostgreSQL无法识别你输入的纯ip和实际带特殊字符的列名,因此报错。
解决步骤
1. 确认列名的实际字符
先执行以下SQL查询,查看test表相关列名的十六进制编码,确认特殊字符的存在:
SELECT column_name, encode(column_name::bytea, 'hex') FROM information_schema.columns WHERE table_name = 'test' AND column_name LIKE '%ip%';
正常的ip列名十六进制是6970,如果结果中显示的编码更长(比如包含e280a8),就说明列名里确实存在不可见字符。
2. 临时查询数据(不改列名)
如果只是需要临时获取数据,用双引号包裹包含特殊字符的完整列名(注意要完全匹配实际列名,包括那个不可见字符,可以直接复制报错提示里的"test.
ip"中的
ip部分):
SELECT " ip" FROM test WHERE name='server';
3. 永久修复(修改列名)
为了避免后续操作反复遇到问题,直接修改列名去掉特殊字符:
ALTER TABLE test RENAME COLUMN " ip" TO ip;
执行完成后,就可以正常使用select ip from test where name='server';这类语句查询数据了。
内容的提问来源于stack exchange,提问作者T_Square
相关产品推荐
相关产品推荐

