You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中EXECUTE语句无法识别数据库名大小写的解决咨询

解决PostgreSQL中EXECUTE语句无法识别数据库名大小写的问题

当数据库名是大小写混合形式(比如ABcdeFG)时,执行你提供的DO块会报错找不到数据库,这是因为PostgreSQL会自动将未加双引号的标识符转为小写,导致实际查找的是abcdefg而非你创建的ABcdeFG。

解决方案

要让EXECUTE正确识别大小写敏感的数据库名,需要用PostgreSQL提供的标识符转义函数来处理数据库名,有两种常用方式:

方式1:使用quote_ident()函数

这个函数会自动为需要的标识符添加双引号,确保大小写被正确识别:

DO
$c$
BEGIN
EXECUTE 'ALTER DATABASE ' || quote_ident(current_database()) || ' SET client_encoding = $$LATIN1$$';
END;
$c$;

方式2:使用format()函数(更清晰规范)

用format()的%I占位符专门处理标识符,%L处理字符串常量,代码可读性更高:

DO
$c$
BEGIN
EXECUTE format('ALTER DATABASE %I SET client_encoding = %L', current_database(), 'LATIN1');
END;
$c$;

原理说明

PostgreSQL中,所有大小写敏感的标识符(数据库名、表名、列名等)必须用双引号包裹才能被系统正确识别。如果直接拼接字符串,未加双引号的标识符会被自动转为小写,就会出现你遇到的“数据库不存在”错误。上述两种方法都能自动为数据库名添加双引号,保证系统能找到对应的大小写混合数据库。

内容的提问来源于stack exchange,提问作者douglas_forsell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 22:27:37