【发布时间】:2019-10-10 21:26:05
【问题描述】:
我正在运行 PostgreSQL 9.6(在 Docker 中,使用 postgres:9.6.13 映像)和 psycopg2 2.8.2。
我的 PostgreSQL 服务器(本地)托管两个数据库。我的目标是在一个使用 Postgres 的外部数据包装器的数据库中使用来自另一个数据库的数据的数据库中创建物化视图。我通过一个使用 psycopg2 的 Python 脚本来完成这一切。
只要创建物化视图不会花费太长时间(即,如果导入的数据量不太大),这种方法就可以很好地工作。但是,如果该过程花费的时间超过大约 250 秒,psycopg2 会抛出异常
psycopg2.OperationalError: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
在 Postgres 的日志中找不到任何错误消息(或任何与此相关的消息)。
如果我从 SQL 客户端 (Postico) 执行,则物化视图创建成功完成。
这段代码大致说明了我在 Python 脚本中所做的事情:
db = pg.connect(
dbname=config.db_name,
user=config.db_user,
password=config.db_password,
host=config.db_host,
port=config.db_port
)
with db.cursor() as c:
c.execute("""
CREATE EXTENSION IF NOT EXISTS postgres_fdw;
CREATE SERVER fdw FOREIGN DATA WRAPPER postgres_fdw OPTIONS (...);
CREATE USER MAPPING FOR CURRENT_USER SERVER fdw OPTIONS (...);
CREATE SCHEMA foreign;
IMPORT FOREIGN SCHEMA foreign_schema FROM SERVER fdw INTO foreign;
""")
c.execute("""
CREATE MATERIALIZED VIEW IF NOT EXISTS my_view AS (
SELECT (...)
FROM foreign.foreign_table
);
""")
【问题讨论】:
标签: python postgresql psycopg2