如何通过psycopg2在指定本地PostgreSQL服务器创建数据库?
问题解答
首先明确:你在pgAdmin里创建的3个“服务器”只是连接配置项,不是独立的PostgreSQL服务器实例——因为它们的host、port、username完全一致,本质上都是连接到本地同一台PostgreSQL服务。所以你通过psycopg2创建数据库时,只会在这唯一的PostgreSQL服务里创建,pgAdmin的三个连接配置都能看到这个新数据库,才会让你误以为是在三个“服务器”上同时创建了。
如果你的目标是在不同的PostgreSQL实例上创建数据库,需要先确保这些实例的参数(比如port)不同,然后按以下方式操作:
方法1:拆分ini配置,指定目标实例
给你的ini文件添加多个配置段,对应不同的PostgreSQL实例(假设实例分别使用5432、5433、5434端口):
[postgresql_instance1] host=localhost user=postgres port=5432 password=xxx [postgresql_instance2] host=localhost user=postgres port=5433 password=xxx [postgresql_instance3] host=localhost user=postgres port=5434 password=xxx
然后在代码中加载对应配置段来连接目标实例:
import configparser import psycopg2 config = configparser.ConfigParser() config.read('你的配置文件名.ini') # 选择要连接的实例(比如instance2) target_config = config['postgresql_instance2'] # 创建数据库需要先连接到默认系统数据库(如postgres) conn = psycopg2.connect( host=target_config['host'], port=target_config['port'], user=target_config['user'], password=target_config['password'], dbname='postgres' ) conn.autocommit = True # 创建数据库必须开启自动提交 cur = conn.cursor() cur.execute("CREATE DATABASE 你的数据库名;") cur.close() conn.close()
方法2:直接在代码中指定连接参数
如果只是临时操作某个特定实例,也可以跳过ini配置,直接在psycopg2.connect()中写明目标参数:
import psycopg2 # 连接到指定端口的实例(比如5433) conn = psycopg2.connect( host='localhost', port=5433, user='postgres', password='xxx', dbname='postgres' ) conn.autocommit = True cur = conn.cursor() cur.execute("CREATE DATABASE 你的数据库名;") cur.close() conn.close()
补充说明
如果你的三个pgAdmin“服务器”确实指向同一PostgreSQL实例,那不存在“仅在特定服务器创建数据库”的说法——因为它们共享同一个服务,数据库创建后所有连接配置都会显示该数据库。这种情况下,你可能是想在同一实例下的不同数据库中操作,只需在连接时指定对应的dbname参数即可。
内容的提问来源于stack exchange,提问作者Epik Epik
相关产品推荐
相关产品推荐

