Docker Compose部署Conda+PostgreSQL环境连接失败及表查询异常问题
问题1:数据库连接拒绝报错
原因
Docker Compose 会为所有服务创建独立的内部网络,同一网络下的容器互相访问需要使用服务名作为主机名。你在jupyter容器中使用localhost访问数据库,localhost指向的是jupyter容器本身,而不是PostgreSQL容器,因此无法连接。
解决方法
将连接字符串中的主机地址从localhost替换为你在docker-compose.yml中定义的数据库服务名database,修改后连接地址为:
postgresql://admin:admin@database:5432/postgresdb
问题2:写入表后查询提示表不存在
原因
PostgreSQL 默认对未加双引号的标识符会自动转换为小写处理。你使用to_sql写入时指定了大写的表名DFTEST,PostgreSQL会自动为该表名加上双引号保留大写格式存储。当你执行SELECT * FROM DFTEST时,PostgreSQL会将未加双引号的DFTEST转为小写dftest去查找,自然找不到对应表。你查询information_schema时明确指定了table_name = 'DFTEST'匹配大写字符串,所以可以查到结果。
解决方法
有两种可选方案:
- 方案1:查询时给大写表名加上双引号
execute_query('SELECT * FROM "DFTEST"') - 方案2(更推荐,符合PostgreSQL命名规范):写入和查询时统一使用小写表名
写入时修改为:
后续查询直接使用:create_table_from_pandas(df_test, 'dftest', df_scheema)execute_query('SELECT * FROM dftest')
内容的提问来源于stack exchange,提问作者Guzmán Vitar
相关产品推荐
相关产品推荐

