•  
  • Home
  • Page 2

Postgresql dans le Lion d’ Apple

Categories: Postgresql
Comments: No Comments
Published on: 26 juillet 2011

Bonjour,

Et voilà une petite nouvelle passée (je trouve) un peu à la trappe :p
La version serveur de du dernier OS d’ Apple, le Mac OS/X Server ( nom de code Lion ) aura désormais par défaut la base de donnée Postgresql d’installée ! et non Mysql.
Version à priori officiel, Postgresql serait plus puissant ( j’ai quelques doutes vu les besoins de macosx ( surtout du site ultra light style wordpress(du riche..) )), mon interprétation une affaire de licensing…

Après moi je m’en fou, plus y a de postgresql mieux c’est :D

Migration Mysql -> Postgresql (Fonctions)

Bonjour à tous,

Bon on va être honnête passer sur postgres c’est bien plus long quand on a une bonne grosse application qui tourne déjà :p .

On s’est rendu compte que nous utilisions beaucoup de fonctions mysql comme ifnull, curdate,insert,… et fatalement ça ne pouvait pas marcher en l’état…
Donc 2 possibilités s’offrent à nous, soit on recode tout soit on se demande si quelqu’un n’a pas été confronté à ce problème et c’est donc taper toutes les fonctions mysql en postgresql.
Tant qu’a faire autant chercher avant ^^
Et bingo, une personne fort bien intentionnée a réécris énormément de fonction mysql, plus d’une centaine :o
Voici un petit aperçu de la liste en question :

  • timediff, sysdate, subdate, space, rand, make_set, last_day, ifnull, dayname, datediff, curtime, curdate, insert,…
  • L’intérêt à mon sens n’est pas de garder ces fonctions ad vitam eternam, mais plutôt d’ accélérer la migration.
    Pour télécharger ce joyaux il suffit d’aller sur le pgfoundry ici
    Le projet n’a plus bougé depuis 2005 mais en tout cas les fonctions que j’ai pris sont toujours valide sur du postgresql 9.0.

    Merci à ce dev

    Migration Mysql -> Postgresql (incrémental -> serial)

    Categories: Postgresql
    Comments: No Comments
    Published on: 11 mai 2011

    Bonjour,

    L’ors de la phase de migration nous avons perdu l’ auto incrément de nos colonnes, celles ci sont devenues de simples colonnes de type Integer (en principe).
    Si vous avez un peu lu la doc de Postgresql vous avez remarqué le « type » Serial, et vous avez essayé un alter table de votre colonne vers serial, résulat :

    ERROR: type "serial" does not exist

    La raison pour faire simple c’est que serial n’est pas un vrai type, je vais juste vous copier la définition officielle :
    Les types de données serial et bigserial ne sont pas de vrais types, mais plutôt un raccourci de notation pour créer des colonnes d’identifiants uniques (similaires à la propriété AUTO_INCREMENT utilisée par d’autres SGBD).
    La requête suivante :

    CREATE TABLE nom_de_table (nom_de_colonne SERIAL);

    est identique à :

    CREATE SEQUENCE nom_de_table_nom_de_colonne_seq;
    CREATE TABLE nom_de_table (nom_de_colonne integer NOT NULL DEFAULT nextval('nom_de_table_nom_de_colonne_seq') NOT NULL);
    ALTER SEQUENCE nom_de_table_nom_de_colonne_seq OWNED BY nom_de_table.nom_de_colonne;

    Et c’est tout simplement cette dernière requête qui va nous aider à faire nos modifications en masse :)
    Tout comme nos précédentes modifications de casse nous allons utiliser concat et les tables systèmes pour parvenir à notre but.

    Voici les requêtes que j’ai utilisés :

    SELECT 'CREATE SEQUENCE ' || table_schema || '.' || table_name || '_' || column_name || '_seq' || ' OWNED BY ' || table_schema || '.' || table_name || '.' || column_name || ';' AS ddlSQL from information_schema.columns where column_name = 'id';


    SELECT 'select setval(' || ''' || table_schema || '.' || table_name || '_id_seq',( select max(id) from ' || table_schema ||'.'|| table_name || '));' from information_schema.columns where column_name = 'id';

    SELECT 'ALTER TABLE ' || table_schema || '.' || table_name || ' ALTER COLUMN id SET DEFAULT nextval(' || ''' || table_schema || '.' || table_name || '_id_seq');' from information_schema.columns where column_name = 'id' ;

    Dans mon cas je modifie toutes les colonnes « id » de toutes mes tables.

    Ovh propose Postgresql dans ses packs mutualisés !

    Categories: Hébergeur, Postgresql
    Comments: No Comments
    Published on: 3 mai 2011

    Bonjour,

    Petite news qui pourrait s’apparenter à une pub ! mais non :p
    Je trouve que c’est suffisamment important pour être mentionné.

    Proposer du postgresql en mutualisé c’est loin d’être courant, en fait c’est même il me semble le premier hébergeur que je vois faire ça en France.
    Mais c’est logique au fond de passer sur postgresql, il n’y a aucun risque, il ne peut y avoir de rachat contrairement à Mysql, c’est open et ça le restera.
    Après on pourrait se demander si c’est vraiment utile de passer sous Postgresql, pour ovh oui car c’est vraiment gratuit, pour le long terme c’est très bien.
    Pour les utilisateurs maintenant, je vois ça plutôt comme une chance, ils peuvent utiliser le serveur de base de données qu’ils souhaitent, ils ont dorénavant le choix,
    et franchement utiliser un vrai serveur de base de données ça n’a pas de prix :D

    Pour ce qui est du coté technique, on notera qu’ils proposent du 8.4 dommage, j’aurais bien aimé voir la 9.0, mais ce n’est pas bien grave.
    L’administration sera fait par l’équivalent de phpmyqdmin soit phpPgAdmin, le dernier en date (5.0.2).

    Le petit lien explicatif d’ Ovh ici

    Sortie du livre de Greg Smith : Postgresql Performance en français !

    Categories: Postgresql
    Comments: No Comments
    Published on: 2 mai 2011

    Bonjour,

    Une petite news sur la sortie prochaine du livre de Greg Smith, le très bon Postgresql 9.0 High Performance.
    J’ai ce livre et je peux vous assurer qu’il est très très bien ! très technique et très poussé mais le tout en anglais ce qui rend la lecture assez difficile pour les anglophobes ;)

    Greg Smith fait d’ailleurs un post sur le site de 2ndquadrant.com

    Pour acheter le livre en français : Livre sur amazon

    Je conseil vivement aux gens de prendre ce livre si ils veulent vraiment aller plus loin avec Postgresql.

    Migration Mysql -> Postrgesql (modif casse suite)

    Categories: Postgresql
    Comments: No Comments
    Published on: 30 avril 2011

    Bonjour,

    Les tables sont renommées mais ça reste le plus facile.
    Il faut maintenant mettre en minuscule toutes les colonnes de toutes les tables et de tous les schémas.
    La requête reste assez semblable à la première elle est juste plus longue.
    Voici donc la bête :

    SELECT 'ALTER TABLE ' || quote_ident(c.table_schema) || '.' || quote_ident(c.table_name) ||
    ' RENAME "' || c.column_name || '" TO ' || quote_ident(lower(c.column_name)) || ';' As ddlsql
    FROM information_schema.columns As c
    WHERE c.table_schema NOT IN('information_schema', 'pg_catalog')
    AND c.column_name <> lower(c.column_name)
    ORDER BY c.table_schema, c.table_name, c.column_name;

    Vous remarquerez que je n’ai pas utilisé du tout la même façon que pour les tables ! et la raison est très simple celui ci n’est pas de moi :o
    Je l’ai trouvé sur le net, mais depuis impossible de retrouver le site web du détenteur ce qui est assez dommage car son site avait l’air d’être une mine d’or :( donc si quelqu’un le trouve je le mettrais en lien.

    Cette requête fonctionne à merveille :) merci à lui qui m’a fait gagner beaucoup de temps.

    Migration Mysql -> Postgresql (modif de casse)

    Categories: Postgresql
    Comments: No Comments
    Published on: 29 avril 2011

    Bonjour,

    Premier problème que je viens de rencontrer, toutes les bases étaient nommées en majuscule-minuscule et pareil pour les colonnes :D
    Problème ? oui…
    La commande

    SELECT * FROM LL_Admin;

    est interprétée sous pgsql par

    SELECT * FROM ll_admin;

    alors que la base est écrite pour lui LL_Admin…
    En gros il vous sortira que la base n’existe pas tout simplement.
    Il y a donc 2 solutions mettre des guillemets

    SELECT * FROM "LL_Admin";

    il comprendra qu’il doit faire attention à la casse.
    Ou alors passer toutes les bases en minuscule pour pas à se soucier de la casse.
    J’ ai biensur choisi la seconde solution, pourquoi ? car je me voyais mal demander au développeur de changer toutes ses requêtes :o
    Donc mon but était de trouver une requete sql qui me changerait toutes bases en une fois et sans en oublier une seule !
    Avec l’aide d’un bouquin je m’en suis sortie et voici la requete en question :

    SELECT 'ALTER TABLE ' || n.nspname || '.' || quote_ident(c.relname) || ' RENAME TO ' || quote_ident(LOWER(c.relname)) || ';'
    FROM pg_class c
    JOIN pg_namespace n ON c.relnamespace = n.oid
    WHERE n.nspname NOT IN('information_schema', 'pg_catalog','pg_toast') AND c.relname <> lower(c.relname);

    Quelques explications sur ce que je fais, c’est donc un Concat, le but est de ramener toutes les tables de la base, donc il faut aller taper dans les tables systèmes pg_class, ma recherche se limite aux tables commençant par table.
    J’utilise le fonction lower pour tout remettre en minuscule cette fonction est super simple, exemple :
    Le Quote_ident qui s’applique a c.relname obligatoire biensur ( rajout de guillemets )
    La comparaison de fin pour ne prendre que les tables ayant des caractères majuscules.

    SELECT lower(TEST)
    Résultat : test

    Plus qu’a mettre le resultat dans un fichier et le lancer ^^

    Migration Mysql -> Postgresql (intro)

    Categories: Postgresql
    Comments: No Comments
    Published on: 29 avril 2011

    Bonjour,

    Je dois faire une migration d’un serveur mysql vers postgresql.
    Je vous mettrais ici à quoi je me suis confronté et comment j’ai résolu mes divers problèmes.
    N’ayant pas terminé ma migration mes soucis et solutions viendront post par post :)

    La migration c’est quoi : 50 bases de 60 tables chacune à migrer vers une database postgresql.
    Donc en gros prendre mes 50 bases pour les mettre dans une base de 50 schémas. ^^
    Bon en fait c’est super simple quand on a l’outil adéquat, j’ai pour cela utilisé l’ utilitaire fait par EntrepriseDB.
    On va parler tout de suite de cet utilitaire, il est très bien mais pleins d’options manquent à l’appel… mais bon ça laisse un peu de boulot comme ça :p
    Pour commencer il m’a bien mis de suite les 50 bases dans une seule postgresql en les « transformant » en schémas :)
    Petit truc que j’aurais aimé c’est de pouvoir faire cette migration à partir d’un dump hors l’utilitaire ne sait pas faire, il doit se connecter au serveur mysql pour migrer dans le postgresql.
    Après cette migration j’ai pu constater les « dégâts » dans le log de migration.

    «page 2 of 2

    Welcome , today is Lundi, 11 décembre 2017