Buen día, alguna idea de como hacer este postgress a mysqli??...
pg_query($pg, "copy cfdcsd from stdin with delimiter '|' null as ''");
| |||
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 |
| ||||
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) |
| ||||
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) |
| |||
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? |
| ||||
Respuesta: De postgress a mysli Cita: 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.http://www.xxx.com/demo/archivo.txt 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:
Veamos si corre bien.Ver original 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 |
| |||
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. |
| |||
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) |
| ||||
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. |
| |||
Respuesta: De postgress a mysli $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/ |
| ||||
Respuesta: De postgress a mysli Antes que nada, verifica la ruta exacta del directorio de datos:
Código MySQL:
Eso te devolverá la ruta donde debe estar el archivo.Ver original Si la ruta mostrada es la misma, entonces usemos el directorio temporal:
Código MySQL:
Ver original 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
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
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. |
| |||
Respuesta: De postgress a mysli |
| ||||
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) |
| ||||
Respuesta: De postgress a mysli No, no, no. La ruta física a nivel sistema operativo, por ejemplo: Cita: ¿Ya te das una idea? /var/www/sites/site.com/htdocs/data/archivo.txt
__________________ Y U NO RTFM? щ(ºдºщ) No atiendo por MP nada que no sea personal. |
| ||||
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) |
| |||
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 |
| ||||
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) |
| |||
Respuesta: De postgress a mysli Cita: El archivo "archivo.txt", en donde lo tengo que subir?? |
| ||||
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: |