Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

query masivo a la base de datos

Estas en el tema de query masivo a la base de datos en el foro de PostgreSQL en Foros del Web. Buenas tardes, Tengo una aplicacion, y esta recibe archivos planos de casi 3 millones de registros pesan 157 megas mas o menos, la base de ...
  #1 (permalink)  
Antiguo 27/12/2010, 15:56
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 16 años, 3 meses
Puntos: 32
query masivo a la base de datos

Buenas tardes,

Tengo una aplicacion, y esta recibe archivos planos de casi 3 millones de registros pesan 157 megas mas o menos, la base de datos esta hecha en postgres.

Q hacen ustedes para aumentar el rendimiento del INSERT a nivel de la base de datos y en codigo


Muchas gracias por sus aportes.
__________________
Como presentar nuestros datos por medio de tablas . clase Aco_DataGrid Version 1.4
  #2 (permalink)  
Antiguo 27/12/2010, 16:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Tema movido desde PHP a PostgreSQL
  #3 (permalink)  
Antiguo 29/12/2010, 06:03
 
Fecha de Ingreso: octubre-2010
Mensajes: 83
Antigüedad: 14 años
Puntos: 4
Respuesta: query masivo a la base de datos

Lo mas optimo y dado que no se mucho se tu caso especifico, es usar COPY [1] no INSERT.

[1] http://www.postgresql.org/docs/9.0/static/sql-copy.html
  #4 (permalink)  
Antiguo 29/12/2010, 15:42
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: query masivo a la base de datos

Buenas tardes, resulta que estoy ejecutando el comando copy, estoy ingresando mas de 3 millones de registros en 1 min aprox (definitivamente copy parece lo mejor), el problema es el siguiente.

La tabla tiene un campo que es idencabezado, todos los registros que se hacen con ese archivo tienen el mismo encabezado y ademas otro campo idregistro, cada registro tiene su propio valor desde 1, 2, 3, hasta la cantidad de registros del archivo.

Por medio del comando COPY puedo ingresar los registros , pero como puedo hacer para registrar el idencabezado y idregistro ? sabiendo que si lo hago en el copy no puedo incrementar el idregistro por cada archivo

(El archivo plano no contiene idencabezado tampoco el idregistro)

Muchas gracias por sus ayudas.
__________________
Como presentar nuestros datos por medio de tablas . clase Aco_DataGrid Version 1.4
  #5 (permalink)  
Antiguo 29/12/2010, 20:47
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: query masivo a la base de datos

si trabajas la versión 8.3 en adelante se puede haciendo el copy de una consulta SQL y no directamente de la tabla.

salkudos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #6 (permalink)  
Antiguo 31/12/2010, 08:48
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: query masivo a la base de datos

No entiendo, me podrias porfavor dar un ejemplo ?
__________________
Como presentar nuestros datos por medio de tablas . clase Aco_DataGrid Version 1.4
  #7 (permalink)  
Antiguo 02/01/2011, 20:23
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: query masivo a la base de datos

Código SQL:
Ver original
  1. COPY (SELECT * FROM country WHERE country_name LIKE 'A%') TO '/usr1/proj/bray/sql/a_list_countries.copy';

tomado de http://www.postgresql.org/docs/8.4/static/sql-copy.html
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #8 (permalink)  
Antiguo 03/01/2011, 10:40
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: query masivo a la base de datos

Buenos dias, gracias por responder, pues parece que no me entiendes la pregunta.

Digamos que el archivo biene así por columnas

columna3, columna4, columna5

y eso se insertar en la base de datos, no hay ningun problema, pero resulta que tambien es necesario ingresar las columnas 1 y 2 pero no estan en el archivo, se crean dinamicamente con java....

Pensaba que iba a necesitar re-construir el archivo desde el principio colocandole las columnas 1 y 2

Quedando asi

Columna 1, Columna 2, Columna 3, Columna 4, Columna 5

para poder hacer el ingreso de los datos.


Espero se entienda la pregunta, muchas gracias
__________________
Como presentar nuestros datos por medio de tablas . clase Aco_DataGrid Version 1.4
  #9 (permalink)  
Antiguo 04/01/2011, 08:07
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: query masivo a la base de datos

entonces si tienes que reconstruir el archivo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #10 (permalink)  
Antiguo 04/01/2011, 16:52
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: query masivo a la base de datos

Hola que tal, gracias por responder.

Pues uf, reconstruir el archivo seria un proceso bastante pesado y solo necesito 2 columnas jeje... la cosa es que esas columnas tienen llaves primarias y se tienen que insertar.

El comando COPY no acepta 2 destinos diferentes ? pensaba en crear el archivo aparte con las 2 columnas y despues decirle que coja del archivo 1 las columnas x y del archivo 2 las columnas x.., jaja pero si es que se pudiera hacer eso...

---

Bueno, tengo otra posible solucion, me dice porfavor que opina.

Q tal si registramos en base a la cantidad de registros del archivo las 2 primeras columnas entonces cuando ya fueramos hacer el COPY pues ya tendria esa parte...

O bueno que me sugiere para poder lograrlo jeej ...

Muchas muchas gracias por la ayuda.
__________________
Como presentar nuestros datos por medio de tablas . clase Aco_DataGrid Version 1.4
  #11 (permalink)  
Antiguo 04/01/2011, 17:41
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: query masivo a la base de datos

En la ubicacion del ejemplo tengo un archivo con una sola columna así.

daniel
daniela
monica

Código SQL:
Ver original
  1. postgres=> CREATE TABLE prueba1(id serial,nombre text,fecha DATE DEFAULT now());
  2.  
  3. NOTICE:  CREATE TABLE creará una secuencia implícita «prueba1_id_seq» para l
  4. a columna serial «prueba1.id»
  5. CREATE TABLE
  6. postgres=> CREATE TABLE prueba2(nombre text);
  7. CREATE TABLE
  8. postgres=> copy prueba2 FROM E'e:\\nombres.txt' WITH delimiter AS ',';
  9. COPY 3
  10. postgres=> SELECT *FROM prueba2;
  11.  nombre
  12. ---------
  13.  daniel
  14.  daniela
  15.  monica
  16. (3 filas)
  17.  
  18.  
  19. postgres=> INSERT INTO prueba1 (nombre) SELECT *FROM prueba2;
  20. INSERT 0 3
  21. postgres=> SELECT *FROM prueba1;
  22.  id | nombre  |   fecha
  23. ----+---------+------------
  24.   1 | daniel  | 2011-01-04
  25.   2 | daniela | 2011-01-04
  26.   3 | monica  | 2011-01-04
  27. (3 filas)

esa sería la forma.

saluds
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: masivo, query
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:40.