tutorial funciona espaƱol ejemplos desde descargar datos consultas como comandos cero aprender sql postgresql insertion

funciona - postgresql pdf



Transfiere datos entre bases de datos con PostgreSQL (8)

Necesito transferir algunos datos de otra base de datos. La base de datos anterior se llama paw1.moviesDB y la nueva base de datos es paw1. El esquema de cada tabla es el siguiente.

Awards (name of the table)(new DB) Id [PK] Serial Award Nominations (name of the table) (old DB) Id [PK] Serial nominations

¿Cómo copio los datos de la base de datos anterior a la nueva base de datos?


Al igual que leonbloy, el uso de dos esquemas en una base de datos es el camino a seguir. Supongamos que un esquema de origen (DB anterior) y un esquema de destino (DB nuevo), puede intentar algo como esto (debe considerar nombres de columnas, tipos, etc.):

INSERT INTO target.Awards SELECT * FROM source.Nominations;


Hay tres opciones para copiarlo si se trata de una sola:

  1. Use un db_link (creo que todavía está en contrib)
  2. Haga que la aplicación haga el trabajo.
  3. Exportar importar

Si esta es una necesidad continua, las respuestas son:

  1. Cambiar a esquemas en la misma base de datos
  2. db_link

Solo tenía que hacer esto exactamente, así que pensé en publicar la receta aquí. Esto supone que ambas bases de datos están en el mismo servidor.

En primer lugar, copie la tabla del antiguo db al nuevo db (porque aparentemente no puede mover datos entre las bases de datos). En la línea de comando:

pg_dump -U postgres -t <old_table> <old_database> | psql -U postgres -d <new_database>

A continuación, conceda permisos de la tabla copiada al usuario de la nueva base de datos. Inicie sesión en psql:

psql -U postgres -d <new_database> ALTER TABLE <old_table> OWNER TO <new_user>; /q

Finalmente, copie los datos de la tabla anterior a la nueva tabla. Inicie sesión como el nuevo usuario y luego:

INSERT INTO <new_table> (field1, field2, field3) SELECT field1, field2, field3 from <old_table>;

¡Hecho!


Esto funcionó para mí para copiar una tabla de forma remota desde mi servidor local al postgresql de Heroku:

pg_dump -C -t source_table -h localhost source_db | psql -h destination_host -U destination_user -p destination_port destination_db

Esto crea la tabla para ti.

Para la otra dirección (de Heroku a local) pg_dump -C -t source_table -h source_host -U source_user -p source_port source_db | psql -h localhost destination_db pg_dump -C -t source_table -h source_host -U source_user -p source_port source_db | psql -h localhost destination_db


De: hxxp: //dbaspot.c om / postgresql / 348627-pg_dump-t-give-where-condition.html ( NOTA: el enlace ahora está roto )

# create tmp db with the data psql mydb CREATE TABLE temp1 (LIKE mytable); INSERT INTO temp1 SELECT * FROM mytable WHERE myconditions; /q # export the data pg_dump --data-only --column-inserts -t temp1 mtdb > out.sql psql mydb DROP TABLE temp1; /q # import temp1 somewhere cat out.sql | psql -d [other_db] psql other_db INSERT INTO mytable (SELECT * FROM temp1); DROP TABLE temp1;

Otro método útil en los controles remotos

psql-remote> COPY elements TO ''/tmp/elements.csv'' DELIMITER '','' CSV HEADER; $ scp host.com:/tmp/elements.csv /tmp/elements.csv psql-local> COPY elements FROM ''/tmp/elements.csv'' DELIMITER '','' CSV;


En realidad, existe la posibilidad de enviar una tabla de datos de una base de datos PostgreSQL a otra. Utilizo el lenguaje de procedimiento plperlu (lenguaje de procedimiento de Perl inseguro) para ello.

Descripción (todo se hizo en un servidor Linux):

  1. Cree un lenguaje plperlu en su base de datos A

  2. Luego, PostgreSQL puede unir algunos módulos de Perl a través de series de los siguientes comandos al final de postgresql.conf para la base de datos A:

    plperl.on_init=''use DBI;'' plperl.on_init=''use DBD::Pg;''

  3. Construyes una función en A como esta:

    CREATE OR REPLACE FUNCTION send_data( VARCHAR ) RETURNS character varying AS $BODY$ my $command = $_[0] || die ''No SQL command!''; my $connection_string = "dbi:Pg:dbname=your_dbase;host=192.168.1.2;port=5432;"; $dbh = DBI->connect($connection_string,''user'',''pass'', {AutoCommit=>0,RaiseError=>1,PrintError=>1,pg_enable_utf8=>1,} ); my $sql = $dbh-> prepare( $command ); eval { $sql-> execute() }; my $error = $dbh-> state; $sql-> finish; if ( $error ) { $dbh-> rollback() } else { $dbh-> commit() } $dbh-> disconnect(); $BODY$ LANGUAGE plperlu VOLATILE;

Y luego puede llamar a la función dentro de la base de datos A:

SELECT send_data( ''INSERT INTO jm (jm) VALUES (''''zzzzzz'''')'' );

Y el valor "zzzzzz" se agregará a la tabla "jm" en la base de datos B.


Las bases de datos están aisladas en PostgreSQL; cuando se conecta a un servidor PostgreSQL se conecta a una sola base de datos, no puede copiar datos de una base de datos a otra usando una consulta SQL.

Si vienes de MySQL: lo que MySQL llama (sin apretar) las " bases de datos " son " esquemas " en PostgreSQL, una especie de espacios de nombres. Una base de datos PostgreSQL puede tener muchos esquemas, cada uno con sus tablas y vistas, y puede copiar de un esquema a otro con la sintaxis schema.table .

Si realmente tiene dos bases de datos distintas de PostgreSQL, la forma más común de transferir datos de una a otra sería exportar sus tablas (con pg_dump -t ) a un archivo e importarlas a la otra base de datos (con psql ).

Si realmente necesita obtener datos de una base de datos PostgreSQL distinta, otra opción (mencionada en la respuesta de Grant Johnson) es dblink , que es un módulo adicional (en contrib/ ).


No puede realizar una consulta entre bases de datos como SQL Server; PostgreSQL no es compatible con esto.

La extensión DbLink de PostgreSQL se usa para conectar una base de datos a otra base de datos. Ha instalado y configurado DbLink para ejecutar una consulta entre bases de datos.

Ya he creado un script paso a paso y un ejemplo para ejecutar la consulta de bases de datos cruzadas en PostgreSQL. Por favor visite esta publicación: PostgreSQL [Video]: Cross Database Queries usando la extensión DbLink