Foros del Web » Programando para Internet » PHP »

De postgress a mysli

Estas en el tema de De postgress a mysli en el foro de PHP en Foros del Web. Buen día, alguna idea de como hacer este postgress a mysqli??... pg_query($pg, "copy cfdcsd from stdin with delimiter '|' null as ''");...
  #1 (permalink)  
Antiguo 13/03/2015, 17:47
 
Fecha de Ingreso: diciembre-2014
Mensajes: 60
Antigüedad: 9 años, 4 meses
Puntos: 1
De postgress a mysli

Buen día, alguna idea de como hacer este postgress a mysqli??...

pg_query($pg, "copy cfdcsd from stdin with delimiter '|' null as ''");
  #2 (permalink)  
Antiguo 13/03/2015, 18:23
 
Fecha de Ingreso: diciembre-2014
Mensajes: 60
Antigüedad: 9 años, 4 meses
Puntos: 1
Respuesta: De postgress a mysli

Basicamente tengo un archivo de texto con esto...

no_serie|fec_inicial_cert|fec_final_cert|RFC|edo_c ertificado
00001000000000066868|2005-01-06 01:56:24|2005-01-06 17:29:15|MOVR711205IN2|R
00001000000000066877|2005-01-06 15:05:30|2006-01-06 15:05:30|TURJ510120V3A|C
00001000000000066969|2005-01-06 16:18:35|2006-01-06 16:18:35|SIC990723JV0|C
00001000000000067589|2005-01-06 21:18:56|2006-01-06 21:18:56|RILA340125FH4|C
00001000000000067821|2005-01-06 23:25:04|2006-01-06 23:25:04|VEAJ490919V48|C
00001000000000067914|2005-01-07 14:31:41|2006-01-07 14:31:41|MAGE5908257M8|C
00001000000000068259|2005-01-07 17:53:47|2006-01-07 17:53:47|FGU830930PD3|C

Y quiero subirlo a la bd a los campos...

no_serie
fec_inicial_cert
fec_final_cert
RFC
edo_certificado

Este es mi codigo....

require_once "global.php";
$pg=$conn->_connectionID; // Directa a postgresql para COPY rapido
$path = $_SERVER['argv'][1];
$csd = $path."/".$_SERVER['argv'][2];

$gestor = fopen($csd, "r");
$primero=true; $cant=0;
if ($gestor) {
while (!feof($gestor)) {
$bufer = fgets($gestor, 4096);
if ($cant%10000==0) echo ".";
if ($primero) {
# Se ignora el primer registro porque son los encabezados
# pero ademas sirve para borrar el contenido actual de las tablas
mysqli_query($mysqli,"TRUNCATE TABLE cfdcsd");
$primero=false;
$sql = "INSERT INTO cfdcsd (no_serie,fec_inicial_cert,fec_final_cert,RFC,edo_ certificado) VALUES ";
//pg_query($pg, "copy cfdcsd from stdin with delimiter '|' null as ''");
} else {
$bufer=trim($bufer);
$l=strlen($bufer);
if ($l>=5) {
$cant++;
if (substr($bufer,-1)=="|")
$bufer=substr($bufer,0,$l-1);
//pg_put_line($pg, $bufer."\n");
$sql .= "('$p1','$p2'),";
} // size 5
} // Primero
} // While
pg_put_line($pg, "\\.\n");
pg_end_copy($pg);
fclose ($gestor);
mysqli_query($mysqli, $sql);
} // gestor
echo "\nCantidad de CSD=$cant\n";
$refe = "'".date(DATE_RSS)."'";
$conn->replace("document", array('docurefe'=>$refe, 'docucvsi'=>6,'docutire'=>"'CARGASAT'",'docunuli'= >11),
array('docucvsi','docutire','docunuli')
);
exit(0);
?>

Última edición por jolquera; 13/03/2015 a las 18:40
  #3 (permalink)  
Antiguo 13/03/2015, 18:59
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: De postgress a mysli

Básicamente no hay un "hacer este postgress a mysqli", porque no es un tema de librerías de acceso a datos. Es un tema de DBMS diferentes, y con recursos incompatibles entre si.
Lo que en PosgreSQL haces con COPY..., en MySQL se hace con LOAD DATA, pero las sentencias son total y absolutamente diferentes. No hay modo de hacer una conversión 1:1 entre ambos DBMS.

De todos modos, puedes darte una vuelta por este tutorial que explica la exportación e importación de datos desde texto plano: http://mysql.conclase.net/curso/index.php?cap=014

Como nota adicional, MySQL exige que el usuario tenga ciertos permisos para realizar la tarea. Se requiere grant de FILE, d elo contrario no puedes ejecutar LOAD DATA.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 16/03/2015, 13:14
 
Fecha de Ingreso: diciembre-2014
Mensajes: 60
Antigüedad: 9 años, 4 meses
Puntos: 1
Respuesta: De postgress a mysli

Hola, he buscado información sobre grant de FILE, pero no he tenido suerte, me podrias compartir algun link?
  #5 (permalink)  
Antiguo 16/03/2015, 13:38
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: De postgress a mysli

Está en el manual de MySQL...
Me parece MUY extraño que no hayas ido directamente hasta alli... considerando que es la PRIMERA opcion en la busqueda de Google.

http://dev.mysql.com/doc/refman/5.1/en/grant.html
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 18/03/2015, 11:53
 
Fecha de Ingreso: diciembre-2014
Mensajes: 60
Antigüedad: 9 años, 4 meses
Puntos: 1
Respuesta: De postgress a mysli

Hola, tengo este codigo....

<?php
error_reporting(E_ALL);
require_once "global.php";
mysqli_query($mysqli,"TRUNCATE TABLE cfdcsd");
$sql="LOAD DATA INFILE 'http://www.xxx.com/demo/archivo.txt'
INTO TABLE cfdcsd
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(no_serie|fec_inicial_cert|fec_final_cert|RFC|edo_ certificado)";
mysqli_query($mysqli,$sql);
?>

Y tratando de ejecutar desde heidisql

LOAD DATA INFILE 'http://www.xxx.com/demo/archivo.txt'
INTO TABLE cfdcsd
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES

Me manda el siguiente mensaje...

No such file or directory

Alguna idea de que podria ser?
  #7 (permalink)  
Antiguo 18/03/2015, 14:54
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: De postgress a mysli

Cita:
http://www.xxx.com/demo/archivo.txt
Eso no es una ruta al archivo. Es una ruta a Web, y MySQL no tiene acceso a recursos de web... ni nunca lo tuvo.
La ruta al archivo debe hacer referencia a la ubicación del archivo en el disco del servidor de MySQL.
¿Que significa eso? Que si no le indicas ninguna ruta, sino el nombre del archivo, lo buscará en la carpeta /mysql/bin, donde están los binarios de MySQL.
Para que tome una ruta externa, la ruta debe ser accesible desde le servidor de MySQL.
Copialo a la carpeta /data, y pon la ruta asi:
Código MySQL:
Ver original 
Veamos si corre bien.

Podrás ver mas detalles en el manual de referencia: http://dev.mysql.com/doc/refman/5.7/en/load-data.html
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 18/03/2015 a las 15:00
  #8 (permalink)  
Antiguo 18/03/2015, 15:41
 
Fecha de Ingreso: diciembre-2014
Mensajes: 60
Antigüedad: 9 años, 4 meses
Puntos: 1
Respuesta: De postgress a mysli

Hola, gracias por la ayuda, paso algo raro, mi tabla cfdcsd se bloquio, no me permite acceder a sus datos, ni truncarla, ni borrarla, porque sera?
  #9 (permalink)  
Antiguo 18/03/2015, 16:00
 
Fecha de Ingreso: diciembre-2014
Mensajes: 60
Antigüedad: 9 años, 4 meses
Puntos: 1
Respuesta: De postgress a mysli

Hola, probe así... LOAD DATA INFILE '/data/archivo.txt', pero me manda este mensaje Can't find file '/data/archivo.txt'. y si le quito el "/" antes del data no aparece ningun mensaje pero no hace nada.
  #10 (permalink)  
Antiguo 18/03/2015, 16:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: De postgress a mysli

Ajá... ¿Y te aseguraste de dónde quedó el archivo? ¿Está en la carpeta correcta? ¿Leiste ALGO del link que te pasé?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 18/03/2015, 16:28
 
Fecha de Ingreso: diciembre-2014
Mensajes: 60
Antigüedad: 9 años, 4 meses
Puntos: 1
Respuesta: De postgress a mysli

Si, el archivo esta en la carpeta correcta, mi codigo actual es...

<?php
error_reporting(E_ALL);
require_once "global.php";
//mysqli_query($mysqli,"TRUNCATE TABLE cfdcsd1");
$sql="LOAD DATA LOCAL INFILE 'data/archivo.txt'
INTO TABLE cfdcsd1
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES";
mysqli_query($mysqli,$sql) or die ('Error: '. mysqli_error($mysqli));
?>

así no muestra nada, si le quito el local, que quede así...

$sql="LOAD DATA INFILE 'data/archivo.txt'

Me da...

Error: Can't get stat of '/var/lib/mysql/data/archivo.txt' (Errcode: 2 - No such file or directory)
  #12 (permalink)  
Antiguo 18/03/2015, 16:41
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: De postgress a mysli

¿Seguro que es la ruta correcta?
Cita:
/var/lib/mysql/data/archivo.txt
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #13 (permalink)  
Antiguo 18/03/2015, 16:45
 
Fecha de Ingreso: diciembre-2014
Mensajes: 60
Antigüedad: 9 años, 4 meses
Puntos: 1
Respuesta: De postgress a mysli

Cita:
Iniciado por pateketrueke Ver Mensaje
¿Seguro que es la ruta correcta?
$sql="LOAD DATA INFILE '/data/archivo.txt'

Sí, si lo pongo así como el "/" antes del data el error que manda es....

Error: Can't get stat of '/data/archivo.txt' (Errcode: 2 - No such file or directory)

Esta vez no hace mencion al /var/lib/mysql/
  #14 (permalink)  
Antiguo 18/03/2015, 16:46
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: De postgress a mysli

Antes que nada, verifica la ruta exacta del directorio de datos:
Código MySQL:
Ver original
  1. SELECT @@datadir;
Eso te devolverá la ruta donde debe estar el archivo.

Si la ruta mostrada es la misma, entonces usemos el directorio temporal:
Código MySQL:
Ver original
  1. SELECT @@tmpdir;

por otro lado, recuerda que si el servidor es Linux, es sensible a mayúsculas/minusculas, por lo que hay que tener cuidado con la escritura del nombre y rutas.

finalmente, usa el path completo:
Código PHP:
Ver original
  1. <?php
  2. require_once "global.php";
  3. //mysqli_query($mysqli,"TRUNCATE TABLE cfdcsd1");
  4. $sql="LOAD DATA LOCAL INFILE '/var/lib/mysql/data/archivo.txt'
  5. INTO TABLE cfdcsd1
  6. FIELDS TERMINATED BY '|'
  7. LINES TERMINATED BY '\r\n'
  8. IGNORE 1 LINES";
  9. mysqli_query($mysqli,$sql) or die ('Error: '. mysqli_error($mysqli));
  10. ?>
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 18/03/2015, 16:59
 
Fecha de Ingreso: diciembre-2014
Mensajes: 60
Antigüedad: 9 años, 4 meses
Puntos: 1
Respuesta: De postgress a mysli

SELECT @@datadir; me muestra /var/lib/mysql/

SELECT @@tmpdir; muestra /tmp

Y usando el path completo no me va, que raro
  #16 (permalink)  
Antiguo 18/03/2015, 17:19
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: De postgress a mysli

Yo creo que la ruta completa de "archivo.txt" es otra, y es dicha ruta la que debes usar.

¿Cual es la ruta completa de dicho archivo?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #17 (permalink)  
Antiguo 18/03/2015, 17:23
 
Fecha de Ingreso: diciembre-2014
Mensajes: 60
Antigüedad: 9 años, 4 meses
Puntos: 1
Respuesta: De postgress a mysli

Cita:
Iniciado por pateketrueke Ver Mensaje
Yo creo que la ruta completa de "archivo.txt" es otra, y es dicha ruta la que debes usar.

¿Cual es la ruta completa de dicho archivo?
Es... www.xxx.com/demo/data/archivo.txt

Se me hace que tengo que moverle al php.ini
  #18 (permalink)  
Antiguo 18/03/2015, 17:32
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: De postgress a mysli

Nada que ver, pero estas confundiendo la ruta web con la ruta del archivo para MySQL. NO SON LA MISMA COSA.
No te confundas.
El archivo debe estar disponible para MySQL, y seguro que no está en la raíz de esa web. ..
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #19 (permalink)  
Antiguo 18/03/2015, 17:33
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: De postgress a mysli

Cita:
Iniciado por jolquera Ver Mensaje
Es... www.xxx.com/demo/data/archivo.txt

Se me hace que tengo que moverle al php.ini
No, no, no.

La ruta física a nivel sistema operativo, por ejemplo:
Cita:
/var/www/sites/site.com/htdocs/data/archivo.txt
¿Ya te das una idea?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #20 (permalink)  
Antiguo 18/03/2015, 18:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: De postgress a mysli

Eso es lo mismo que trato de explicarte: MySQL no "ve" rutas virtuales del servidor Web, ni tampoco "ve" rutas de Internet.
Para MYSQL sólo existen las rutas físicas del disco donde el Server de MySQL está alojado. Nada más.
Es a esas rutas, como te indica @pateketrueke, donde debes mandar a leer el archivo, y NO, PHP ni interviene, MYSQL funciona independientemente de si está o no PHP activo. Es la funcionalidad de acceso a archivos de MySQL la que realiza la lectura. No PHP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #21 (permalink)  
Antiguo 18/03/2015, 18:11
 
Fecha de Ingreso: diciembre-2014
Mensajes: 60
Antigüedad: 9 años, 4 meses
Puntos: 1
Respuesta: De postgress a mysli

O sea que mi codigo tendria que quedar así??...

<?php
error_reporting(E_ALL);
require_once "global.php";
//mysqli_query($mysqli,"TRUNCATE TABLE cfdcsd1");
$sql="LOAD DATA LOCAL INFILE 'C:\1\archivo.txt'
INTO TABLE cfdcsd1
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES";
mysqli_query($mysqli,$sql) or die ('Error: '. mysqli_error($mysqli));
?>

Perdon si no entendi
  #22 (permalink)  
Antiguo 18/03/2015, 18:17
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: De postgress a mysli

Bueno, eso sólo te funcionaría en tu propia PC, pero no en la web...
En los servidores, usualmente la unidad C es inaccesible, ya que es donde residen componentes administrativos del host. Las bases de los usuarios, asi como las webs, resuden habitualmente en otros discos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #23 (permalink)  
Antiguo 18/03/2015, 18:18
 
Fecha de Ingreso: diciembre-2014
Mensajes: 60
Antigüedad: 9 años, 4 meses
Puntos: 1
Respuesta: De postgress a mysli

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Bueno, eso sólo te funcionaría en tu propia PC, pero no en la web...
En los servidores, usualmente la unidad C es inaccesible, ya que es donde residen componentes administrativos del host. Las bases de los usuarios, asi como las webs, resuden habitualmente en otros discos.
El archivo "archivo.txt", en donde lo tengo que subir??
  #24 (permalink)  
Antiguo 18/03/2015, 20:01
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: De postgress a mysli

Ya te lo hemos dicho varias veces...
A la carpeta /data de MySQL, o la /tmp. ¿Donde está?
Bueno, si la base esta en la web, en un hosting, pregunta a los administradores del sitio. Ellos te explicarán como proceder.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: mysql
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 17:33.