Mostrando las entradas con la etiqueta Postgress SQL. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Postgress SQL. Mostrar todas las entradas

martes, 4 de abril de 2017

Activar Driver PDO con XAMPP o servidores APACHE

Activar Driver PDO con XAMPP o servidores APACHE 

1. Verificar las extensiones de PDO activadas
php -i|grep PDO


2. Descomentar las librerias pdo para el driver que se va utilizar(MYSQL, PGSQL, ec) del archivo PHP.INI
sudo nano /opt/lampp/etc/php.ini 

si no utilizas xampp utliza la ruta de tu php.ini

utilizando GEDIT
sudo gedit /opt/lampp/etc/php.ini
   
# mysql
extension=php_pdo_mysql.dll

# Posgress
extension=php_pdo_pgsql.dll
extension=php_pgsql.dll


algo asi

3. instalar el driver
-activar para postgress
sudo apt-get install php7.0-pgsql

-activar para mysql
sudo apt-get install php7.0-mysql

viernes, 5 de junio de 2015

UPDATE from SELECT using SQL Server, MYSQL

UPDATE
    geocoder,
    cellocator_historial
SET
    geocoder.GPSX = cellocator_historial.GPSX,
    geocoder.GPSY = cellocator_historial.GPSY

WHERE
    geocoder.idcellocator = cellocator_historial.idcellocator
    AND cellocator_historial.idcellocator BETWEEN 10 AND 10000 ;
UPDATE
    table_to_update,
    table_info
SET
    table_to_update.col1 = table_info.col1,
    table_to_update.col2 = table_info.col2

WHERE
    table_to_update.ID = table_info.ID
UPDATE business AS b
INNER JOIN business_geocode AS g ON b.business_id = g.business_id
SET b.mapx = g.latitude,
  b.mapy = g.longitude
WHERE  (b.mapx = '' or b.mapx = 0) and
  g.latitude > 0
UPDATE
   geocoder,
   cellocator
SET
   geocoder.idvehiculoestado="1"   
where cellocator.idcellocator =  geocoder.idcellocator 
AND cellocator.RMUId="564730" 
AND geocoder.idvehiculo= 26 
AND geocoder.CellDateTime > "2015-07-30 11:01:35"  
AND geocoder.CellDateTime <= "2016-04-29 18:24:12"   
AND cellocator.Speed >= "2"

UPDATE ubigeo AS distrito 
INNER JOIN ubigeo AS provincia ON provincia.codigo = concat(LEFT(distrito.codigo, 4),'00') AND provincia.tipo_ubigeo_id =  2 
INNER JOIN ubigeo AS departamento ON departamento.codigo = concat(LEFT(distrito.codigo, 2),'0000') AND departamento.tipo_ubigeo_id =  1 
SET 
distrito.descripcion =  CONCAT(distrito.ubigeo,', ' , provincia.ubigeo ,', ' ,departamento.ubigeo)
WHERE distrito.tipo_ubigeo_id = 3  ; 
referencia http://stackoverflow.com/questions/2334712/update-from-select-using-sql-server


Para Insert Into
INSERT INTO address (address.GPSX, address.GPSY)
SELECT  DISTINCT
ROUND(GPSX ,3) ,
ROUND(GPSY ,3)
 FROM geocoder
WHERE  (geocoder.address <> "" )  ;

miércoles, 19 de noviembre de 2014

Habilitar controlador de Postgresql en XAMPP

Habilitar controlador de Postgresql en XAMPP


La herramienta de desarrollo XAMPP es es un servidor de plataforma libre, el cual integra en una sola aplicación, un servidor web Apache, interpretes de lenguaje de scripts PHP, un servidor de base de datos MySQL, un servidor de FTP FileZilla, el popular administrador de base de datos escrito en PHP, MySQL, entre otros módulos

Como antes se especificó por defecto esta configurado para trabajar con el motor de base de datos MySQL, pero en algunos casos se requiere trabajar con otros motores de base de datos.

Es por ello que este apartado se enfoca a la habilitación de los archivos de configuración de xampp para poder trabajar con la base de datos Postgres.

A continuación los siguientes pasos:

  1. Abrir el archivo de configuración de php, el cual se encuentra en el siguiente directorio
    • C:\xampp\php\php.ini

  2. Dentro de ese archivo buscar la sección de extensiones y descomenta las siguientes lineas
    • extension=php_pdo_pgsql.dll
    • extension=php_pgsql.dll
  3. Ahora guardar los cambios realizados en el archivo: php.ini
De esta manera hemos habilitado que reconozca driver de postgres. Para constatar lo que hemos hecho, realizamos lo siguiente.

Abrir un navegador web y digitar la siguiente direccion: localhost/



y aparecerá la siguiente imagen anterior, donde debemos dar clic donde esta seleccionado de color rojo: phpinfo() y luego dirigirse hacia abajo hasta encontrar algo parecido a la siguiente imagen.



Como se puede observar la esta reconociendo el driver de postgres.

También debemos tener en cuenta añadir los siguientes archivos:

  1. Buscar en el directorio de instalación de postgres, bajo \bin los siguientes archivos
    • libpq.dll
    • libintl.dll  o debe de estar como libintl-8.dll 
  2. Copiar los archivos anteriores al siguiente directorio
    • C:\xampp\apache\bin
Listo prueba tu conexión y debe ejecutar correctamente 

lunes, 22 de septiembre de 2014

La recursion es divina - Consultas recursivas en SQL

El lenguaje SQL no solía ser lo mas comodo para realizar consultas en donde participe el concepto de "recursión", pero claramente algunos problemas son muy incomodos si los abordamos de otra forma. Por suerte para nosotros, desde la aparición de las CTE, esto ha cambiado y ahora es "simple" realizar consultas recursivas, veremos un ejemplo de como podemos realizarlo.


Consideremos la siguiente tabla con datos de ejemplo:
  1. CREATE TABLE #Empleados(idEmpleado INT, Nombre VARCHAR(10), idJefe INT)  
  2.   
  3. INSERT INTO #Empleados  
  4. SELECT 0, 'Bob'null UNION  
  5. SELECT 1, 'Tom', 0 UNION  
  6. SELECT 2, 'Joe'null UNION  
  7. SELECT 3, 'John', 2 UNION  
  8. SELECT 4, 'Ringo', 1 UNION  
  9. SELECT 5, 'Paul', 4   
  10.   
  11. SELECT * FROM #Empleados  
Esta tabla contiene los empleados de una empresa e indica sus respectivos jefes. Lo divertido es que los jefes son también empleados, por lo tanto son registros de la misma tabla.
Supongamos que quiero averiguar el nombre del jefe de cada empleado. Esto lo puedo realizar con un "self join" sin necesidad de recursividad.

  1. SELECT e.Nombre Empleado, j.Nombre Jefe  
  2. FROM #Empleados e  
  3. INNER JOIN #Empleados j ON e.idJefe=j.idEmpleado;  

Pero ahora supongamos que quiero una consulta mas compleja, una que me retorne no el jefe directo, sino el jefe superior de cada empleado. Cualquiera que tenga conocimientos de algoritmos sabe que la mejor forma de responder a esta pregunta es con una estructura recursiva. No pretendo en éste artículo escribir que es la recursión, sino como utilizarla en SQL, así que daré por sentado que saben de que hablo.
Una estructura recursiva requiere básicamente de dos partes:
1) El caso base
2) El caso recursivo

Para escribir esto utilizaremos una CTE que tendrá estas dos partes, y deben unirse con un UNION ALL. La primer parte será el caso base (en el WHERE debo filtrar para que lo sea) y en la segunda el caso recursivo, el cual hace un JOIN con la CTE. Este join es lo que indica que es un caso recursivo. Nótese que defino la cte utilizandola a ella misma, por eso mismo es recursiva.

  1. WITH cte  
  2. AS(  
  3. -- Caso base  
  4. SELECT e.idEmpleado, e.Nombre Nombre, e.idEmpleado Jefe  
  5. FROM #Empleados e  
  6. WHERE e.idJefe IS NULL  
  7. -- Fin Caso base  
  8. UNION ALL  
  9. -- Caso recursivo  
  10. SELECT e.idEmpleado, e.Nombre Nombre, j.Jefe  
  11. FROM #Empleados e  
  12. INNER JOIN cte j ON e.idJefe=j.idEmpleado  
  13. -- Fin Caso recursivo  
  14. )  
  15. SELECT c.Nombre Empleado, j.Nombre Jefe  
  16. FROM cte c  
  17. INNER JOIN #Empleados j ON c.Jefe=j.idEmpleado  
  18.   
  19. DROP TABLE #Empleados  
Con esto obtengo el código del jefe superior de cada uno, entonces en el SELECT lo cruzo con la tabla de empleados para obtener su nombre. Parece medio confuso pero es cuestión de acostumbrarse.
Hay algunos inconvenientes que pueden presentarse, pero eso lo comentaré en el próximo artículo.
Visita mi Blog dentro de los Blogs de Informática en Coobis.

sábado, 26 de abril de 2014

PROCEDIMIENTOS ALMACENADOS EN POSTGRESQL




En PostgreSql a diferencia de otros motores de bases de datos, no existe una distinción explicita entre una función y un procedimiento almacenado. En PostgreSql solo existen funciones, claro que estas pueden ser usadas a modo de una función o de un procedimiento almacenado. Además de esta diferencia con otros motores de bases de datos, es importante mencionar que PostgreSql nos ofrece más de un lenguaje para crear nuestros procedimientos almacenados, pudiendo elegir entre los siguientes lenguajes:
En lo personal siempre me he inclinado por Pl/PgSQL pues es un lenguaje procedural basado en SQL y que sigue el estándar ANSI SQL. Si deseas conocer más de Pl/PgSQLaquí puedes encontrar la documentación oficial.
En este artículo veremos cómo se crean funciones en PostgreSql que nos devuelven un recordset y para ello usaremos la misma lógica del procedimiento almacenado creado en Mysql para el artículo “Procedimientos almacenados de Mysql desde Excel Con VBA y ADO“. Y de igual forma al procedimiento en mysql, crearemos una función en PostgreSql que nos devuelva un recordset conteniendo una lista de países, esto claro, dependiendo del valor pasado a través de un parámetro de entrada.

Para crear la función, ejecutaremos pgAdmin III

Y una vez autenticados en nuestro servidor y seleccionada la base de datos en que trabajaremos ejecutaremos el editor de consultas SQL que se encuentra en la barra de herramientas:

Y se nos mostrará el editor de consultas, en el que podremos ejecutar tanto código PLSQL como SQL.

Una vez abierto nuestro editor el primer paso será crear la tabla lista_paises y para ello deberemos ejecutar el siguiente bloque SQL, modificando antes el userpostgrepor el usuario que usas en tu servidor.
1
2
3
4
5
6
7
8
9
10
CREATE TABLE lista_paises
(
  id integer DEFAULT 0,
  opcion character varying(100) DEFAULT ''::character varying
)
WITH (
  OIDS=FALSE
);
ALTER TABLE lista_paises
  OWNER TO userpostgre;
Ya que tenemos la tabla comenzaremos a crear nuestra función. Para ello primero definimos el encabezado, y aquí es importante mencionar que en este caso, donde vamos a devolver un recordset, deberemos declarar tantos parámetros de salida como columnas tenga nuestra consulta:
1
2
3
4
5
CREATE OR REPLACE FUNCTION SP_DamePaises
   ( IN PV_OPCION VARCHAR(10) default 'DAMETODOS',
     OUT columna1 int,
     OUT columna2 varchar(100)
   ) RETURNS setof record AS
Dado que la función devolverá un recordset conteniendo las columnas id y opción, hemos agregado ambos parámetros de salida a la función y hemos agregado el parámetro de entrada Pv_Opcion que usaremos a manera de menú de selección para decirle a la función que bloque deberá ejecutar. Al final del encabezado establecemos el tipo de dato que devolverá la función que en este caso será un recordset o setof  record.
Declarado el encabezado vamos a continuar con el cuerpo de la función que contendrá las operaciones a realizar:
1
2
3
4
5
6
7
8
9
10
11
12
$BODY$
begin
 IF PV_OPCION = 'DAMETODOS' THEN
   return query select id, opcion from lista_paises;
 END IF; 
 IF PV_OPCION = 'DAMECINCO' THEN
   return query select id, opcion from lista_paises limit 5;
 END IF; 
return;
end;
$BODY$
LANGUAGE 'plpgsql';
Como podemos ver, el código es muy parecido al usado en Mysql, con las variantes de que aquí debemos establecer con return query el recordset a devolver, además de tener que indicar el lenguaje a usar y el inicio y fin del cuerpo de la función.
Para  ejecutar el procedimiento almacenado ejecutaremos la sentencia que nos devolverá el listado:
1
Select * From SP_DamePaises('DAMETODOS');
Una vez que lo hayamos ejecutado obtendremos el siguiente resultado:


Y para terminar aquí está  el bloque completo de la función:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CREATE OR REPLACE FUNCTION SP_DamePaises
   ( IN PV_OPCION VARCHAR(10) default 'DAMETODOS',
     OUT columna1 int,
     OUT columna2 varchar(100)
   ) RETURNS setof record AS
$BODY$
begin
 IF PV_OPCION = 'DAMETODOS' THEN
   return query select id, opcion from lista_paises;
 END IF; 
 IF PV_OPCION = 'DAMECINCO' THEN
   return query select id, opcion from lista_paises limit 5;
 END IF; 
return;
end;
$BODY$
LANGUAGE 'plpgsql';

REFERENCIA : http://elpoli.delphiaccess.com/procedimientos-almacenados-en-postgresql/