Estoy tratando de copiar una tabla completa de una base de datos a otra en Postgres. ¿Alguna sugerencia?
273
Estoy tratando de copiar una tabla completa de una base de datos a otra en Postgres. ¿Alguna sugerencia?
Respuestas:
Extraiga la tabla y canalícela directamente a la base de datos de destino:
Nota: Si la otra base de datos ya tiene la tabla configurada, debe usar el
-a
indicador para importar datos solamente, de lo contrario, puede ver errores extraños como "Sin memoria":fuente
pg_dump -U remote_user -h remote_server -t table_to_copy source_db | psql target_db
-a
indicador solo para datos . es decirpg_dump -a -t my_table my_db | psql target_db
. Mientras estoy aquí, si su base de datos está en un servidor, me resulta más fácil volcar la base de datos en un archivo y luego scp ese archivo a la base de datos, luego enviar el contenido del archivo a psql. Por ejemplo,pg_dump -a -t my_table my_db > my_file.sql
y después de poner eso en su servidor ->psql my_other_db < my_file.sql
pg_dump -t '"tableToCopy"' source_db | psql target_db
. Tenga en cuenta que las comillas simples Y dobles rodean el nombre de la tablaTambién puede usar la funcionalidad de copia de seguridad en pgAdmin II. Solo sigue estos pasos:
Funciona bien y puede hacer varias tablas a la vez.
fuente
Objects
sección. En OSX, haga clic en el botón SQL u obtenga aSQL Editor
través delTools
menú para pegar el SQL copiado del archivo de copia de seguridad.¡Usar dblink sería más conveniente!
fuente
Usando psql, en un host Linux que tiene conectividad a ambos servidores
fuente
PGPASSWORD=password1 psql -U ...
¡ni siquiera necesita subcapas explícitas! Por lo general, primero debe hacer un par de cosas para configurar, por lo que puede ser necesario utilizar subcapas de todos modos. Además, las contraseñas no se exportarán a procesos posteriores. ¡Gracias!pg_dump -t '<table_name>' --schema-only
Primero instala dblink
Entonces, harías algo como:
fuente
INSERT INTO l_tbl (l_col1, l_col2, l_col3) SELECT * FROM dblink('dbname=r_db hostaddr=r_ip password=r_pass user=r_usr', 'select r_col1, r_col2, r_col3 from r_tbl where r_col1 between ''2015-10-29'' AND ''2015-10-30'' ') AS t1(col1 MACADDR, col2 TIMESTAMP, col3 NUMERIC(7,1));
(l medios locales, r es remota escapar comillas simples Proporcionar tipos col...)Use pg_dump para volcar los datos de la tabla y luego restaurarlo con psql.
fuente
Si tiene ambos servidores remotos, puede seguir esto:
Copiará la tabla mencionada de la base de datos fuente en la misma tabla con nombre de la base de datos de destino, si ya tiene un esquema existente.
fuente
Podrías hacer lo siguiente:
fuente
Esto es lo que funcionó para mí. Primer volcado a un archivo:
luego cargue el archivo volcado:
fuente
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:
fuente
export PGPASSWORD=<passw>
antes de ejecutar el comandoIntenté algunas de las soluciones aquí y fueron realmente útiles. En mi experiencia, la mejor solución es usar la línea de comando psql , pero a veces no tengo ganas de usar la línea de comando psql. Así que aquí hay otra solución para pgAdminIII
El problema con este método es que se debe escribir el nombre de los campos y sus tipos de la tabla que desea copiar.
fuente
pg_dump
no funciona siempreDado que tiene la misma tabla ddl en ambos dbs, podría piratearla desde stdout y stdin de la siguiente manera:
fuente
Igual que las respuestas de user5542464 y Piyush S. Wanare pero divididas en dos pasos:
de lo contrario, la tubería solicita las dos contraseñas al mismo tiempo.
fuente
Debe usar DbLink para copiar los datos de una tabla en otra tabla en una base de datos diferente. Debe instalar y configurar la extensión DbLink para ejecutar consultas cruzadas de bases de datos.
Ya he creado una publicación detallada sobre este tema. Por favor visite este enlace
fuente
Revisa este script de Python
fuente
Si las dos bases de datos (desde y hacia) están protegidas con contraseña, en ese escenario, el terminal no solicitará la contraseña para ambas bases de datos, la solicitud de contraseña aparecerá solo una vez. Entonces, para solucionar esto, pase la contraseña junto con los comandos.
fuente
Estaba usando DataGrip (Por Intellij Idea). y fue muy fácil copiar datos de una tabla (en una base de datos diferente a otra).
Primero, asegúrese de estar conectado con ambos DataSources en Data Grip.
Seleccione la Tabla de origen y presione F5 o (Haga clic con el botón derecho -> Seleccionar Copiar tabla en).
Esto le mostrará una lista de todas las tablas (también puede buscar usando un nombre de tabla en la ventana emergente). Simplemente seleccione su objetivo y presione OK.
DataGrip se encargará de todo lo demás por usted.
fuente
Si ejecuta pgAdmin (Backup:,
pg_dump
Restore:)pg_restore
desde Windows, intentará generar el archivo de forma predeterminadac:\Windows\System32
y es por eso que obtendrá un error de permiso / acceso denegado y no porque el usuario postgres no esté lo suficientemente elevado. Ejecute pgAdmin como administrador o simplemente elija una ubicación para la salida que no sean las carpetas del sistema de Windows.fuente
Como alternativa, también puede exponer sus tablas remotas como tablas locales utilizando la extensión de contenedor de datos ajenos. Luego puede insertar en sus tablas seleccionando de las tablas en la base de datos remota. El único inconveniente es que no es muy rápido.
fuente