PG-Day France 2014 se déroulera … pendant deux jours !

Comme chaque année le PG-Day France est organisé afin de partager autour de la communauté PostgreSQL. Après une édition 2012 à Lyon, une version 2013 à Nantes, pour cette année 2014 nous accueillerons les participants à Toulon, le 5 et 6 juin 2014.

Contrairement au programme habituel, le PG-Day 2014 se dote d’une nouvelle formule avec une journée de formation et une journée de conférences. Nous aurons l’honneur d’accueillir au sein de la communauté le développeur Bruce Momjan qui sera auteur d’une conférence et de l’un des ateliers.

Au programme cette année, les nouveautés de PostgreSQL 9.4, de la réplication et de PostGis, l’optimisation en lecture/écriture, la présentation d’un SIG en Côte d’Ivoire ou son utilisation dans les entreprises françaises, les types, VACUUM ou l’intégration de données.

Par ailleurs à l’occasion des 10 ans de la communauté PostgreSQL Francophone, une soirée spéciale est organisée.

Site web de l’événement.

 

Publicités

Fonctionnalités JSON dans PostgreSQL 9.3

PostgreJSON

La croissance de la base de données NoSQL a permis d’enregistrer des données avec un schéma plus libre que les SGBD relationnels classiques. Dans sa version 9.3, PostgreSQL s’adapte et ajoute à son catalogue de type de colonnes le format JSON. Voici un rapide aperçu des possibilités qu’offre cette nouvelle colonne.

Jeux de test

CREATE TABLE developpeurs (
  id serial NOT NULL,
  nom character varying(64),
  prenom character varying(64),
  contact json,
  CONSTRAINT pk_developpeurs PRIMARY KEY (id));
INSERT INTO developpeurs (nom, prenom, contact)
VALUES('Drd', 'Tyler','{"adress":"Paper Street", "city":"Los Angeles"}');
INSERT INTO developpeurs (nom, prenom, contact)
VALUES('D', 'Jeff','{"twitter":"CotcotCoder", "email":"jeffd@mail.fr"}');
INSERT INTO developpeurs (nom, prenom, contact)
VALUES('Sld', 'Lisbeth ','{"twitter":"lizbets", "email":"lizbets@mail.fr"}');
INSERT INTO developpeurs (nom, prenom, contact)
VALUES('Lgh', 'David','{"linkedin":"DavidLgh", "email":"david.lgh@mail.fr", "phone":"0666789561"}');

Notre colonne contact est au format JSON. C’est à dire un format Text vérifiant que son contenu est bien formaté dans le format éponyme. Le développeur sera donc libre d’y stocker des informations dans un schéma facilement évolutif (ajout d’un nouveau moyen de contact). Enfin ce format permettra l’utilisation des commandes JSON que nous allons voir par la suite.

SELECT information->>’deeper’

La commande suivante permettra de récupérer directement le champs email de notre contact sans avoir à retourner l’objet JSON au complet à notre applicatif :

SELECT contact->>'email' AS email FROM developpeurs

Image Ici nous utilisons l’opérateur ->> qui permet de retourner l’élément sous sa forme textuelle.

Naturellement ce champs peut être filtrées ou utilisée comme une colonne « relationnelle classique »:

SELECT CONCAT (nom, ' ', prenom) AS "Email OK"
FROM developpeurs
WHERE contact->>'email' NOT LIKE '';

ImageSi nous ajoutons un peu de variété à notre jeu de test :

INSERT INTO developpeurs (nom, prenom, contact)
VALUES('IM', 'Max','{"telephones":["0345467921","0345467490"]}');

La requête suivante permettra d’accéder au tableau :

SELECT prenom, contact->'telephones'
FROM developpeurs
WHERE prenom ILIKE 'Max'

Nous avons utilisé l’opérateur -> qui nous retourne l’objet en tant que tel, donc ici un tableau.

ImageMais nous allons aussi pouvoir sélectionner directement le second élément du tableau (l’index commence à 0) :

SELECT prenom, contact->'telephones'->1
FROM developpeurs
WHERE prenom ILIKE 'Max'

ImageOu connaitre sa taille :

SELECT json_array_length(contact->'telephones')
FROM developpeurs
WHERE prenom LIKE 'Max'

Naturellement de nombreuses autres fonctions sont présentes afin de traiter plus finement le type JSON, dans les procédures stockées.

On pourra ainsi traiter chaque élément de la colonne comme une ligne indépendante :

SELECT * 
FROM json_each('{"fixe":"0384852540", "portable":"0673484312"}')

ImageOu alors de traiter les clés :

SELECT  * 
FROM json_object_keys('{"rue":"Place Victor Hugo", "CP":"25000", "ville":"Besancon"}')

Image

Pour plus d’informations n’hésitez pas à consulter la documentation.

Documentation officielle

PGsnap – outil de rapport pour PostgreSQL

PgSnap est un outil open-source (licence BSD) développé en PHP qui permet de générer des rapports concernant vos bases de données PostgreSQL. Son auteur n’est autre que Guillaume LELARGE connu pour son activité au sein du SGBD. L’outil fournit des pages html récapitulant la base de données à l’instant donné, rien n’est dynamique mais il est simple de configurer cron pour lancer le script toute les heures par exemple. Lire la suite

Fiche de rappel SQL (Cheat-Sheet)

Le SQL pour Structured Query Language est utilisé par de nombreux SGBD (Bases de données) et est devenu une réference pour ce milieu.

Logo-Wikipedia Malgré la contestation d’un groupe anti-SQL et l’apparition de nombreuses base de données n’utilisant pas ce langage (Apache Couchdb, Cassandra d’Apache aussi, …) il reste encore nécessaire de le maitriser et il est selon moi rapidement acquis (pour une utilisation classique). Lire la suite