una tabla servidores registros pasar otra insertar diferentes datos copiar columna sql postgresql copy cross-database

tabla - insertar registros de una base de datos a otra en sql server



PostgreSQL copia/transfiere datos de una base de datos a otra (3)

Necesito copiar datos de una tabla a otra. las dos tablas tienen casi la misma estructura, pero están en diferentes bases de datos.

Lo intenté

INSERT INTO db1.public.table2( id, name, adress, lat, lng ) SELECT id, name, adress, lat lng FROM db2.public.table2;

Cuando intento esto, obtengo una base de datos cruzada de error ... no implementada


Esta es una tarea realmente directa. Simplemente use dblink para este propósito:

INSERT INTO t(a, b, c) SELECT a, b, c FROM dblink(''host=xxx user=xxx password=xxx dbname=xxx'', ''SELECT a, b, c FROM t'') AS x(a integer, b integer, c integer)

Si necesita recuperar datos de la base de datos externa de forma regular, sería conveniente definir una asignación de servidor y usuario. Entonces, podrías usar una declaración más corta:

dblink(''yourdbname'', ''your query'')


También hay otra manera de hacerlo. Si la extensión de dblink no está disponible, es posible copiar los datos directamente en la línea de comando, utilizando un conducto que conecta la entrada y salida estándar:

psql source_database -c ''COPY table TO stdout'' | psql target_database -c ''COPY table FROM stdin''

Pero esto va a funcionar solo en postgres 9.4 o superior


Si está en postgresql 9.0 o posterior (y probablemente 8.0 o posterior) en una sesión psql, también puede usar:

CREATE DATABASE new_database TEMPLATE original_database;

New_database será un clon de original_database incluyendo tablas, esquema de tabla, codificaciones y datos.

De los documentos:

La principal limitación es que no se pueden conectar otras sesiones a la base de datos de origen mientras se está copiando.

Le recomendaría que verifique que el clon es correcto con selecciones juiciosas de las tablas db nuevas y antiguas. Los documentos también dicen:

Sin embargo, es importante comprender que esto (aún) no está pensado como una función de "COPIA DE BASE DE DATOS" de propósito general.