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

Problemilla con una base de datos

Estas en el tema de Problemilla con una base de datos en el foro de PostgreSQL en Foros del Web. Buenas tardes. Estoy haciendo una base de datos para guardar informacion existente en unos documentos .csv Despues de googlear un rato me tope con el ...
  #1 (permalink)  
Antiguo 09/09/2009, 17:07
 
Fecha de Ingreso: septiembre-2009
Mensajes: 40
Antigüedad: 15 años, 2 meses
Puntos: 0
Problemilla con una base de datos

Buenas tardes.

Estoy haciendo una base de datos para guardar informacion existente en unos documentos .csv
Despues de googlear un rato me tope con el siguiente codigo para copiar datos de un .csv a Postgres:
Código:
COPY captura FROM 'c:/captura.csv' USING DELIMITERS ';'
La base de datos es la siguiente:

Código:
CREATE TABLE captura
(
  num_av_ppal text NOT NULL,
  central_ppal text,
  empresa_ppal text NOT NULL,
  cola_ppal text,
  tipo_av_ppal text,
  cuadrilla_ppal text,
  nombre_ppal text,
  apellido_ppal text,
  estado_ppal text,
  area_ppal text,
  nom_area_ppal text,
  hora_ppal text,
  uni_n_ppal text,
  "cc/cd_ppal" text,
  "pc/pd_ppal" text,
  asd_ppal text,
  p_local_ppal text,
  fuente_ppal text,
  fecha_ppal text,
  dias_pend_ppal text,
  rango_ppal text,
  id bigint NOT NULL DEFAULT nextval('id_seq'::regclass),
  CONSTRAINT averias_entrantes_pkey PRIMARY KEY (id)
)
La idea de colocar como campo clave "id" es que un numero puede tener varias averias, por lo que no puede ser campo clave ya que puede estar repetido.

Al ejecutar el codigo para copiar el .csv me da el siguiente error:
Código:
ERROR:  faltan datos en la columna «id»
Alguien podria ayudarme con este problema pls? :(
  #2 (permalink)  
Antiguo 09/09/2009, 21:16
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: Problemilla con una base de datos

debes dar información acerca del archivo csv.

es muy posible que en el archivo no exista la columna o hayan vacíos. recuerda que id está como primary key

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 10/09/2009, 06:36
 
Fecha de Ingreso: septiembre-2009
Mensajes: 40
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Problemilla con una base de datos

El .csv tiene los siguientes campos:

Código:
  
  num_av
  central
  empresa
  cola
  tipo_av
  cuadrilla
  nombre
  apellido
  estado
  area
  nom_area
  hora
  uni_n
  cc/cd
  pc/pd
  asd
  p_local
  fuente
  fecha
  dias_pend
  rango
El campo id de la tabla lo cree con la finalidad de luego hacer otra tabla en la cual pueda relacionar los numeros telefonicos de las averias, ya que un numero puede tener varias averias. En resumen, en el .csv no esta ese campo id
  #4 (permalink)  
Antiguo 10/09/2009, 07:05
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: Problemilla con una base de datos

Veo que en la definición de la tabla, la manejas con una secuencia por defecto.
Yo te recomendaría incluir desde el csv el campo id empezando desde 1 hasta el numero de registros que tengas en el archivo.

El error es claro y hace alusión a la falta del campo id en la importación del archivo.

nos cuentas como te va.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 10/09/2009, 07:47
 
Fecha de Ingreso: septiembre-2009
Mensajes: 40
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Problemilla con una base de datos

Cita:
Iniciado por huesos52 Ver Mensaje
Veo que en la definición de la tabla, la manejas con una secuencia por defecto.
Yo te recomendaría incluir desde el csv el campo id empezando desde 1 hasta el numero de registros que tengas en el archivo.

El error es claro y hace alusión a la falta del campo id en la importación del archivo.

nos cuentas como te va.
Lo que pasa es que el archivo se genera despues de ejecutar un macro que hace la captura de los numeros telefonicos con sus averias, no genera por defecto ese campo id, la unica solucion que se me viene a la mente es crear un macro que le agregue el campo id y lo autocomplete. Eso o cambiarme a mysql que he buscado y me he topado con codigos que hacen eso y hasta la columna que se le indique
  #6 (permalink)  
Antiguo 10/09/2009, 07:57
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: Problemilla con una base de datos

Nuca lo he pobado, pero según la documentación puedes especificar las columnas.

copy captura (todas las columnas menos id) FROM 'c:/captura.csv' USING DELIMITERS ';'

no creo que tengas problemas, ya que la secuencia es un valor por defecto y se insertará bien.

pruebalo y nos cuentas
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 10/09/2009, 08:02
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 17 años, 3 meses
Puntos: 20
Respuesta: Problemilla con una base de datos

No creo que te deje hacer lo que te dice huesos ya que tiene dos restricciones el campo ID. Debes de quitarle la restriccion de NOT NULL y la de Primary Key al campo id y dejar la secuencia para que se vaya autoincrementando antes de copiar los datos. Despues que termines de copiar ya le agregas esas respectivas restricciones a la tabla con ALTER TABLE para que los nuevos valores te respeten esas condiciones.
  #8 (permalink)  
Antiguo 10/09/2009, 08:16
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: Problemilla con una base de datos

Como dije, nunca lo he probado (No se si funcione) pero si hay problemas, no creo que lo que dice sergestux genere problema.

Cuando en un insert se obvian campos que son primary o not null, pero tienen un valor por defecto, este es insertado por debajo del insert sin la necesidad de ser ingresado manualmente.

La secuencia se incrementa cada que se hace una inserción y no tendría problemas con el primary key y ademas de esto, el valor nunca sería nulo, por lo que tampoco le encontraría problemas.

Esperemos las pruebas de agrus para ver como le va.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #9 (permalink)  
Antiguo 10/09/2009, 09:08
 
Fecha de Ingreso: septiembre-2009
Mensajes: 40
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Problemilla con una base de datos

Gracias por su ayuda a todos primero que nada.

Bueno me amargue un poco con el Postgres >.< asi que hice la base de datos en Mysql, googleando me tope con un codigo que aparentemente hace lo mismo que el anterior:
Código:
$fp = fopen ('c:/captura.csv', 'r');
        while ($data = fgetcsv ($fp,1000,'^')){
        $insertar="INSERT INTO averias(tlf_av,central,empresa,cola,tipo_av,cuadrilla,nombre,apellido,estado,nom_area,hora,uni_n,cc/cd,pc/pd,asd,p_local,fuente,fecha,dias_pend,rango) VALUES ('$data[0]','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]','$data[7]','$data[8]','$data[9]','$data[10]','$data[11]','$data[12]','$data[13]','$data[14]','$data[15]','$data[16]','$data[17]','$data[18]','$data[19]');";
        mysql_query($insertar) or die(mysql_error());
        echo "$insertar ok <br />";
        }
        fclose($fp);
Obviamente me conecto a la base de datos y todo eso previo a ejecutar el fopen, pero me tira el siguiente error:

Código:
Notice: Undefined offset: 2 in C:\wamp\www\averias\guardar_captura.php on line 10
Y continua el Undefined offset hasta 19 (o sea de 2 a 19) ademas de:
Código:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/cd,pc/pd,asd,p_local,fuente,fecha,dias_pend,rango) VALUES ('2814451361;8169;CAN' at line 1
  #10 (permalink)  
Antiguo 10/09/2009, 09:15
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: Problemilla con una base de datos

Si ya decidiste seguir con mysql, postea en dicho foro los problemas que tengas.

Hiciste las pruebas con postgres? Que resultado tuvieron?

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #11 (permalink)  
Antiguo 10/09/2009, 09:19
 
Fecha de Ingreso: septiembre-2009
Mensajes: 40
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Problemilla con una base de datos

No he intentado aun con Postgres, tengo un problema con la extension en php, he intentado solventarla quitando el ";" del php.ini y pegando las .dll en la carpeta WINDOS en c, pero nada. Voy a postear el error en la seccion de mysql a ver si me ayudan un poco.

Gracias por todo :D

Edit:
Lei lo de la documentacion y ya no me da el error de que falta el campo id, pero ahora me tira el siguiente error:
Código:
ERROR:  secuencia de bytes no válida para codificación «UTF8»: 0xd149
HINT:  Este error también puede ocurrir si la secuencia de bytes no coinciden con la codificación esperada por el servidor, lo cual es controlado por el parámetro «client_encoding».
CONTEXT:  COPY captura, línea 7

Última edición por Agrus; 10/09/2009 a las 09:45
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 11:13.