postgresql - registros - Copia una tabla de una base de datos a otra en Postgres
copiar una tabla a otra base de datos postgresql (15)
¡Usar dblink sería más conveniente!
truncate table tableA;
insert into tableA
select *
from dblink(''dbname=postgres hostaddr=xxx.xxx.xxx.xxx dbname=mydb user=postgres'',
''select a,b from tableA'')
as t1(a text,b text);
Estoy intentando copiar una tabla completa de una base de datos a otra en Postgres. ¿Alguna sugerencia?
Debe usar DbLink para copiar los datos de una tabla en otra tabla en una base de datos diferente. Tiene que instalar y configurar la extensión DbLink para ejecutar la consulta de base de datos cruzada.
Ya he creado una publicación detallada sobre este tema. Por favor visite este enlace
Esto es lo que funcionó para mí. Primer volcado a un archivo:
pg_dump -h localhost -U myuser -C -t my_table -d first_db>/tmp/table_dump
a continuación, cargue el archivo volcado:
psql -U myuser -d second_db</tmp/table_dump
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
Igual que las respuestas de user5542464 y Piyush S. Wanare, pero divididas en dos pasos:
pg_dump -U Username -h DatabaseEndPoint -a -t TableToCopy SourceDatabase > dump
cat dump | psql -h DatabaseEndPoint -p portNumber -U Username -W TargetDatabase
de lo contrario, la tubería pide las dos contraseñas al mismo tiempo.
Para mover una tabla de la base de datos A a la base de datos B en su configuración local, use el siguiente comando:
pg_dump -h localhost -U nombre-propietario -p 5432 -C -t tabla-nombre base de datos1 | psql -U nombre-propietario -h localhost -p 5432 database2
Probé algunas de las soluciones aquí y fueron muy útiles. En mi experiencia, la mejor solución es usar la línea de comandos psql , pero a veces no tengo ganas de usar la línea de comandos psql. Así que aquí hay otra solución para pgAdminIII
create table table1 as(
select t1.*
from dblink(
''dbname=dbSource user=user1 password=passwordUser1'',
''select * from table1''
) as t1(
fieldName1 as bigserial,
fieldName2 as text,
fieldName3 as double precision
)
)
El problema con este método es que el nombre de los campos y sus tipos de la tabla que desea copiar deben estar escritos.
Si ejecuta pgAdmin (Copia de seguridad: pg_dump, Restaurar: pg_restore) desde Windows, intentará enviar el archivo por defecto a c:/Windows/System32
y es por eso que obtendrá un error de Permiso / Acceso denegado y no porque el usuario postgres no sea suficientemente elevado Ejecute pgAdmin como administrador o simplemente elija una ubicación para la salida que no sean las carpetas del sistema de Windows.
Si tiene ambos servidores remotos, puede seguir esto:
pg_dump -U Username -h DatabaseEndPoint -a -t TableToCopy SourceDatabase | psql -h DatabaseEndPoint -p portNumber -U Username -W TargetDatabase
Copiará la tabla mencionada de la base de datos de origen en la misma tabla nombrada de la base de datos de destino, si ya tiene un esquema existente.
También puede utilizar la funcionalidad de copia de seguridad en pgAdmin II. Solo 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 configure el formato en "simple"
- Haga clic en la pestaña "Opciones de volcado # 1", marque "Solo datos" o "Solo esquema" (dependiendo de lo que esté haciendo)
- En la sección Consultas, haga clic en "Usar inserciones de columna" y "Comandos de inserción de usuario".
- Haga clic en el botón "Copia de seguridad". Esto da como resultado un archivo .backup
- Abra este nuevo archivo usando el bloc de notas. Verá los scripts de inserción necesarios para la tabla / datos. Copie y pegue estos en la nueva página de base de datos en pgAdmin. Ejecutar como pgScript - Consulta-> Ejecutar como pgScript F6
Funciona bien y puede hacer varias tablas a la vez.
Usando psql, en el host linux que tiene conectividad a ambos servidores
( PGPASSWORD=password1
psql -U user1 -h host1 database1 /
-c "copy (select field1,field2 from table1) to stdout with csv" ) /
|
( PGPASSWORD=password2
psql -U user2 -h host2 database2 /
-c "copy table2 (field1, field2) from stdin csv" )
Use pg_dump para volcar los datos de la tabla y luego restaurarlo con psql.
pgdump no funciona siempre ...
Dado que tienes la misma tabla ddl en los dos dbs, puedes hackearla desde stdout y stdin de la siguiente manera:
# grab the list of cols straight from bash
psql -d "$src_db" -t -c /
"SELECT column_name
FROM information_schema.columns
WHERE 1=1
AND table_name=''"$table_to_copy"''"
# ^^^ filter autogenerated cols if needed
psql -d "$src_db" -c /
"copy ( SELECT col_1 , col2 FROM table_to_copy) TO STDOUT" |/
psql -d "$tgt_db" -c "/copy table_to_copy (col_1 , col2) FROM STDIN"
primero instala dblink
harías algo como
INSERT INTO t2 select * from
dblink(''host=1.2.3.4
user=*****
password=******
dbname=D1'', ''select * t1'') tt(
id int,
col_1 character varying,
col_2 character varying,
col_3 int,
col_4 varchar
);
pg_dump -h <host ip address> -U <host db user name> -t <host table> > <host database> | psql -h localhost -d <local database> -U <local db > user>