alvarovipgday  ¿Quién es Álvaro Herrera?

Ingeniero Civil en Computación de la Universidad de Chile, y “Major Developer” y “Committer” del proyecto PostgreSQL. (más…)

El Sexto PGDay Cubano se celebrará los días 21 y 22 de octubre de 2014 (fecha actualizada!!), como en años anteriores forma parte de los talleres que se realizan en el marco de la Semana Tecnológica de FORDES. Este año la sede principal será el teatro de ETECSA en el Centro de Negocios Miramar, sito en  Ave.3ra e/ 76 y 78 , Playa, La Habana, Cuba. (más…)

PostgreSQL no proporciona comandos MERGE o UPSERT directos (ver [1] y [2] ). Pero pueden lograrse resultados similares mediante el uso de CTE (expresiones común de tabla).
Para fusionar dos tablas obtenidas de fuentes distintas tuve la necesidad de implementar una solución similar a los ejemplos
que dejo a continuación espero que sea útil para otros colegas.

–Variante con el uso de “NOT EXISTS”
CREATE TABLE myTable
(pid numeric, sales numeric, status varchar(6));

CREATE TABLE myTable1
(pid numeric, sales numeric, status varchar(6));

–Añadir record a myTable1
INSERT INTO myTable1 VALUES(1,12,’CURR’);
INSERT INTO myTable1 VALUES(2,13,’NEW’ );
INSERT INTO myTable1 VALUES(3,15,’CURR’);

–Añadir record a myTable
INSERT INTO myTable  VALUES(2,24,’CURR’);
INSERT INTO myTable  VALUES(3, 0,’OBS’ );
INSERT INTO myTable  VALUES(4,42,’CURR’);
SELECT * FROM myTable1 ORDER BY pid;

BEGIN;
WITH upsert AS
(UPDATE mytable1 m SET sales=m.sales+d.sales, status=d.status FROM mytable d WHERE m.pid=d.pid
RETURNING m.*
)
INSERT INTO mytable1 SELECT a.pid, a.sales,’NEW’ FROM mytable a WHERE NOT EXISTS (SELECT 1 FROM mytable1 b WHERE b.pid=a.pid);
SELECT * FROM myTable1 ORDER BY pid;
ROLLBACK;

–Variante con el uso de “NOT IN”

CREATE TABLE myTable
(pid numeric, sales numeric, status varchar(6));

CREATE TABLE myTable2
(pid numeric, sales numeric, status varchar(6));

–Añadir record a myTable2
INSERT INTO myTable2 VALUES(1,12,’CURR’);
INSERT INTO myTable2 VALUES(2,13,’NEW’ );
INSERT INTO myTable2 VALUES(3,15,’CURR’);

–Añadir record a myTable
INSERT INTO myTable  VALUES(2,24,’CURR’);
INSERT INTO myTable  VALUES(3, 0,’OBS’ );
INSERT INTO myTable  VALUES(4,42,’CURR’);

SELECT * FROM myTable2 ORDER BY pid;

BEGIN;
WITH upsert AS
(UPDATE mytable2 m SET sales=m.sales+d.sales, status=d.status FROM mytable d WHERE m.pid=d.pid
RETURNING m.*
)
INSERT INTO mytable2 SELECT a.pid, a.sales,’NEW’ FROM mytable a WHERE a.pid NOT IN (SELECT b.pid FROM mytable2 b);
SELECT * FROM myTable2 ORDER BY pid;
ROLLBACK;

==============
MERGE en Oracle
==============
MERGE INTO myTable2 m
USING myTable d
ON (m.pid = d.pid)
WHEN  MATCHED
THEN  UPDATE SET   m.sales  = m.sales+d.sales
,     m.status = d.status
WHEN  NOT MATCHED
THEN INSERT VALUES (d.pid,d.sales,’NEW’);

SELECT * FROM myTable2 ORDER BY pid;

============
Referencia:
============
[1] https://wiki.postgresql.org/wiki/SQL_MERGE
[2] https://wiki.postgresql.org/wiki/MergeTestExamples#The_first_example

mar/14

20

News Postgre

Dalibo se enorgullece en anunciar el lanzamiento de pgBadger 5, un analizador de desempeño de PostgreSQL, construido para alta velocidad con informes muy detallados basados ​​en los archivos de registro de Postgres. Esta versión principal (más…)

En este artículo abordaremos una sencilla explicación de lo representan las tablas temporales en postgreSQL así como su utilización y funcionamiento. (más…)

PostgreSQL tiene distintos tipos de datos nativos disponibles para el usuario, además, permite  que estos puedan agregar otros tipos de datos usando el comando CREATE TYPE. Entre los tipos de datos que podemos agregar se encuentran los enumerativos (ENUM).Los tipos de datos enumerativos de PostgreSQL son equivalentes a los que tienen un gran número de lenguajes de programación. Son los tipos de datos que comprenden un  conjunto ordenado de valores,  un ejemplo de un tipo de datos enum puede ser el de los días de la semana. (más…)

Una de las alternativas que PostgreSQL ofrece para asegurar la integridad de datos es el uso de restricciones (constraints). Las restricciones se establecen en campos para asegurar su validez. (más…)

Yohz Software anuncia el lanzamiento de DB Doc. 1.0 el 21 de enero de 2014  y está disponible para su descarga inmediata. (más…)

DBConvert / DBSync para PostgreSQL y Oracle ha sido lanzado. Contiene un grupo de aplicaciones compatibles con la conversión y sincronización entre PostgreSQL y Oracle en ambas direcciones. (más…)

El Grupo de Desarrollo de PostgreSQL ha liberado una actualización crítica para todas las versiones soportadas, incluyendo la 9.3.2, 9.2.6, 9.1.11, 9.0.15 y la 8.4.19. (más…)

Publicaciones antiguas »