Copiar una tabla de una base de datos a otra en Postgres
Estoy intentando copiar una tabla completa de una base de datos a otra en Postgres. ¿Alguna sugerencia?
Aceptado
Extraiga la tabla y canalícela directamente a la base de datos de destino:
pg_dump -t table_to_copy source_db | psql target_db
Nota: Si la otra base de datos ya tiene la tabla configurada, debe usar la -a
marca para importar datos únicamente; de lo contrario, puede ver errores extraños como "Sin memoria":
pg_dump -a -t table_to_copy source_db | psql target_db
También puede utilizar la función de copia de seguridad en pgAdmin II. Simplemente sigue estos pasos:
- En pgAdmin, haga clic derecho en la tabla que desea mover, seleccione "Copia de seguridad"
- Elija el directorio para el archivo de salida y establezca el formato en "normal"
- Haga clic en la pestaña "Opciones de volcado n.° 1", marque "Solo datos" o "solo esquema" (dependiendo de lo que esté haciendo)
- En la sección Consultas, haga clic en "Usar inserciones de columnas" y "Comandos de inserción de usuario".
- Haga clic en el botón "Copia de seguridad". Esto genera un archivo .backup
- Abra este nuevo archivo usando el bloc de notas. Verá los scripts de inserción necesarios para la tabla/datos. Cópielos y péguelos en la nueva página SQL de la base de datos en pgAdmin. Ejecutar como pgScript - Consulta->Ejecutar como pgScript F6
Funciona bien y puede hacer varias tablas a la vez.
¡ Usar dblink sería más conveniente!
truncate table tableA;
insert into tableA
select *
from dblink('hostaddr=xxx.xxx.xxx.xxx dbname=mydb user=postgres',
'select a,b from tableA')
as t1(a text,b text);
Usando psql, en un host Linux que tiene conectividad con ambos servidores
( export PGPASSWORD=password1
psql -U user1 -h host1 database1 \
-c "copy (select field1,field2 from table1) to stdout with csv" ) \
|
( export PGPASSWORD=password2
psql -U user2 -h host2 database2 \
-c "copy table2 (field1, field2) from stdin csv" )