Я использую PostgreSQL 9.6 (в Docker, использую образ postgres: 9.6.13) и psycopg2 2.8.2.
Мой сервер PostgreSQL (локальный) содержит две базы данных.Моя цель состоит в том, чтобы создать материализованные представления в одной из баз данных, которые используют данные из другой базы данных, используя внешние обертки данных Postgres.Я делаю все это из скрипта Python, который использует psycopg2.
Это работает хорошо, пока создание материализованного представления не занимает много времени (т. Е. Если объем импортируемых данных не слишком велик).Однако, если процесс занимает больше, чем ~ 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
);
""")