Te recomendamos que revises esta respuesta en un entorno controlado antes de enviarlo a producción, saludos.
Solución:
solo puedes usar execute
:
with self.connection as cursor:
cursor.execute(open("schema.sql", "r").read())
aunque es posible que desee configurar psycopg2 para autocommit
mode primero para que pueda usar la propia gestión de transacciones del script.
Sería bueno si psycopg2 ofreciera un modo más inteligente en el que leyera el archivo en una declaración a la vez y lo enviara a la base de datos, pero en la actualidad no existe tal modo, que yo sepa. Necesitaría un analizador bastante sólido para hacerlo correctamente cuando se enfrente a $$
citando (y su $delimiter$
variante donde el delimitador puede ser cualquier identificador), standard_conforming_strings
, E''
cadenas, cuerpos de funciones anidadas, etc.
Tenga en cuenta que esto no trabajar con:
- cualquier cosa que contenga
psql
comandos de barra invertida - COPIAR .. DESDE STDIN
- muy entrada larga
… y por lo tanto no funcionará con volcados de pg_dump
No puedo responder a los comentarios de la respuesta seleccionada por falta de reputación, así que haré una respuesta para ayudar con la COPY
tema.
Dependiendo del volumen de su base de datos,pg_dump --inserts
salidas INSERT
en lugar de COPY
s
Acuérdate de que tienes permiso de reseñar si encontraste tu atolladero .