postgresql – 如何在psycopg2中使用多个Postgres数据库
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了postgresql – 如何在psycopg2中使用多个Postgres数据库,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2239字,纯文字阅读大概需要4分钟。
内容图文
![postgresql – 如何在psycopg2中使用多个Postgres数据库](/upload/InfoBanner/zyjiaocheng/897/247a99c0ac584be79036450746e65503.jpg)
我在两个不同的服务器上有两个不同的Postgres数据库(一个实际上是本地的).与this question类似,我想同时使用这两个数据库.但是,我无法弄清楚如何使用psycopg2做到这一点.
所以我想我可能需要两个不同的游标:
conn_local = psycopg2.connect(dbname='local_db', host='localhost')
conn_remote = psycopg2.connect(dbname='remote_db', host='some.other.server')
curs_local = conn_local.cursor()
curs_remote = conn_remote.cursor()
但是我该如何处理这些数据库呢?例如,当我尝试从两个表连接数据时:
curs_local.execute("""
CREATE TABLE local_db.public.newtable AS
SELECT remote_db.public.remotetable.rcolumn AS col_from_remote,
local_db.public.localtable.lcolumn AS col_from_local
FROM remote_db.public.remotetable, local_db.public.localtable""")
psycopg2.NotSupportedError的样式将出现错误:未实现跨数据库引用:“local_db.public.new_table”. Postgres / psycopg2中显然不存在ATTACH TABLE命令(如solution here中所述).
是否可以一次使用多个数据库?怎么样?
或者我是否必须先将数据从remote_db复制(导出/导入)到local_db?
解决方法:
是的,可以同时使用多个数据库,但是你找错了地方. psycopg2只是一个简化访问和操作PostgreSQL数据的库,但它远远超出了psql的功能.您希望通过使用Foreign Data Wrappers – http://www.postgresql.org/docs/current/static/sql-createforeigndatawrapper.html在数据库级别上解决此问题
这在您的模式定义中确实变得更加复杂,但是从主机some.other.server数据库remote_db中获取远程表,看起来好像它们位于数据库local_db中的localhost上.一个关于如何连接包装器的简单示例:
CREATE EXTENSION postgres_fdw;
CREATE SERVER some_remote_server
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host 'some.remote.server', port '5432', dbname 'remote_db');
CREATE USER MAPPING FOR local_user
SERVER some_remote_server
OPTIONS (user 'remote_user', password 'remote_user_password');
CREATE FOREIGN TABLE local_table_name (id int, value int)
SERVER some_remote_server
OPTIONS ( schema_name 'remote_schema_name', table_name 'remote_table_name');
现在在本地你可以运行
SELECT * from local_table_name
并且将对远程主机执行查询.不用说,这需要两台服务器之间的连接.
同样,如果确实需要,可以针对localhost创建“远程”服务器,并指向不同的本地数据库以进行跨数据库查询.感觉很脏但是有可能.
正如@a_horse_with_no_name所提到的,这不是很有效.如果您发现自己过于频繁地执行此操作,则无法获得最佳性能,并且您最好有充分的理由在此时保持数据库分离.
内容总结
以上是互联网集市为您收集整理的postgresql – 如何在psycopg2中使用多个Postgres数据库全部内容,希望文章能够帮你解决postgresql – 如何在psycopg2中使用多个Postgres数据库所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。