PostgreSQL libpq PQconnectdb数据库名称大小写连接问题求助
问题原因与解决建议
核心原因
PostgreSQL的SQL解析器处理未加引号的标识符时,会自动将其转换为全小写存储;但libpq的PQconnectdb函数不会对连接参数中的数据库名做自动小写转换,而是直接将你传入的原始字符串作为数据库名进行查找。你创建的数据库实际是testdatabase(全小写),但连接时传入的是TestDatabase(带大写),自然找不到匹配的数据库。
解决方法
- 直接在conninfo中使用全小写的数据库名:
const char *conninfo = "dbname=testdatabase"; // 其他连接参数按需添加 PGconn *conn = PQconnectdb(conninfo); - 若因特殊需求必须保留大写形式(仅适用于创建数据库时加了双引号的场景),可给数据库名加上双引号:
注意:你当前创建的数据库是无引号的const char *conninfo = "dbname=\"TestDatabase\""; PGconn *conn = PQconnectdb(conninfo);testdatabase,此方法对你的场景无效,仅作扩展说明。
验证方式
用psql命令行工具可以快速验证这个行为:
- 执行
psql -d TestDatabase会和libpq一样报错,因为传入的是原始大写名称 - 执行
psql -d testdatabase则能成功连接,和预期一致
内容的提问来源于stack exchange,提问作者Tomaso Tosolini
相关产品推荐
相关产品推荐

