Outils pour utilisateurs

Outils du site


basededonnees:postgresql

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
basededonnees:postgresql [08/12/2014 16:28]
127.0.0.1 modification externe
basededonnees:postgresql [30/07/2016 23:20] (Version actuelle)
julp [Mapper des valeurs en d'autres lors d'une requête]
Ligne 32: Ligne 32:
 ====== Insensibilité à la casse ====== ====== Insensibilité à la casse ======
  
-A moins d'utiliser les opérateurs type expression régulière (ILIKE ou ~*), ça n'existe pas donc il faut le gérer soi-même : +Déplacé sur [[http://www.julp.fr/blog/posts/4-sql-gestion-de-la-casse]]
-  * en appliquant LOWER de part et d'autres (''%%... WHERE LOWER(colonne) = LOWER(valeur)%%''+
-  * on peut supprimer celui appliqué à la colonne par un index déjà en minuscules :<code>-- x : nom de la table, y : nom de la colonne +
-CREATE UNIQUE INDEX x_y_unique on x(LOWER(y)); +
--- Puis à requêter ainsi : ... WHERE colonne = LOWER(valeur)</code> +
-  * utiliser le type //citext// après installation du module supplémentaire éponyme +
-  * autres+
  
 ====== Équivalents MySQL de INSERT IGNORE, ON DUPLICATE KEY UPDATE, etc ====== ====== Équivalents MySQL de INSERT IGNORE, ON DUPLICATE KEY UPDATE, etc ======
  
-  * INSERT IGNORE : +Déplacé et MàJ sur [[http://www.julp.fr/blog/posts/11-postgresql-equivalents-mysql-de-insert-ignore-et-insert-on-duplicate-key-update]]
-    * Avec une sous-requête (peu commode à cause des casts explicites et de la condition à gérer soi-même ?) :<code sql>INSERT INTO table(col1, col2, col3) +
-    SELECT * FROM ( +
-        SELECT 'val1'::text AS col1, 'val2'::text AS col2, 'val3'::text AS col3 -- adapter les types +
-    ) t WHERE NOT EXISTS(SELECT NULL FROM table WHERE table.col1 = t.col1) +
-;</code> +
-    * Avec une règle : <code sql>CREATE OR REPLACE RULE x_insert_ignore AS ON INSERT TO x +
-    WHERE EXISTS (SELECT 1 FROM x WHERE pk = NEW.pk) +
-    DO INSTEAD NOTHING;</code> +
-    * En PL/pgSQL : <code sql>BEGIN +
-    INSERT INTO ...; +
-EXCEPTION WHEN unique_violation THEN +
-    -- ne rien faire +
-END;</code> +
-  * INSERT ... ON DUPLICATE KEY UPDATE ... : +
-    * Avec une règle : <code sql>CREATE OR REPLACE RULE x_insert_on_duplicate_key AS ON INSERT TO x +
-    WHERE EXISTS (SELECT 1 FROM x WHERE pk = NEW.pk) +
-    DO INSTEAD UPDATE x SET colonne1 = NEW.colonne1, colonneN = NEW.colonneN WHERE pk = NEW.pk;</code> +
-    * En PL/pgSQL, **une** méthode : <code sql>BEGIN +
-    INSERT INTO ...; +
-EXCEPTION WHEN unique_violation THEN +
-    UPDATE ...; +
-END;</code>+
  
 ====== Tableaux ====== ====== Tableaux ======
Ligne 129: Ligne 101:
 Attention : les indices de tableaux pour PostgreSQL commence à 1 et non 0 ! Attention : les indices de tableaux pour PostgreSQL commence à 1 et non 0 !
 Pour les autres cas, autre solution, passer par un hstore : Pour les autres cas, autre solution, passer par un hstore :
-<code sql>SELECT COALESCE('"FT"=>"Fiche Technique","PV"=>"Procès Verbal","NF"=>"Norme"'::hstore -> <in>, 'Valeur par défaut');</code>+<code sql>SELECT COALESCE($$"FT"=>"Fiche Technique","PV"=>"Procès Verbal","NF"=>"Norme"$$::hstore -> <in>, 'Valeur par défaut');</code> 
 +Ou json : 
 +<code sql>SELECT COALESCE($${"FT"=>"Fiche Technique","PV"=>"Procès Verbal","NF"=>"Norme"}$$::json ->> <in>, 'Valeur par défaut');</code>
  
 ====== Déclencheurs (triggers) ====== ====== Déclencheurs (triggers) ======
basededonnees/postgresql.1418052487.txt.gz · Dernière modification: 08/05/2015 17:47 (modification externe)