Skip site navigation (1) Skip section navigation (2)

Re: Migration SQL Serveur 2008 vers PostgreSQL

From: Guillaume Lelarge <guillaume(at)lelarge(dot)info>
To: "F(dot) BROUARD / SQLpro" <sqlpro(at)club-internet(dot)fr>
Cc: pgsql-fr-generale <pgsql-fr-generale(at)postgresql(dot)org>
Subject: Re: Migration SQL Serveur 2008 vers PostgreSQL
Date: 2012-01-04 10:52:05
Message-ID: 1325674325.2592.25.camel@localhost.localdomain (view raw or flat)
Thread:
Lists: pgsql-fr-generale
Merci de répondre à la liste.

On Wed, 2012-01-04 at 11:02 +0100, F. BROUARD / SQLpro wrote:
> Le 04/01/2012 10:23, Guillaume Lelarge a écrit :
> > On Wed, 2012-01-04 at 09:59 +0100, F. BROUARD / SQLpro wrote:
> >>> [...]
> >>> J'ai vu quelques outils et/ou scripts sur le net, mais j'aurai bien aimé avoir
> >>> une retour d'expérience d'une personne qui aurait déjà fait ce travail pour
> >>> prendre une direction sérieuse sans trop perdre de temps.
> >>
> >> il n'existe aucun outil capable de traduire automatiquement les
> >> fonctions, triggers et procédures de l'un vers l'autre.
> >>
> >> En sus, PG étant très limité :
> >
> > Commentaire très subjectif que je ne partage pas :)
> >
> >> - au niveau des procédures stockées (en fait elle n'existent pas, seule
> >> des fonctions atomiques existant dans PG) ce qui pose problème si des
> >> transactions sont encapsulées dans les PS.
> >
> > Oui. PostgreSQL ne gérant pas les sous-transactions, il ne peut pas
> > gérer des transactions dans une requête (vu qu'on appelle une procédure
> > stockée à partir d'une requête).
> 
> rien à voir avec les "sous transactions" qui d'ailleurs n'existent pas 
> conceptuellement parlant.
> 
> PG considère qu'une fonction est une transaction, alors que SQL Server, 
> conformément à la norme SQL, permet de piloter les transactions à 
> l'intérieur des procédures et déclencheurs (ordres SQL COMMIT et ROLLBACK)
> 
> >
> >> - au niveau des triggers, car PG n'autorise pas la mise à jour de la
> >> table cible et de même que pour les PS il n 'est pas possible de piloter
> >> la transaction à l'intérieur du déclencheur.
> >>
> >
> > Pas sûr de comprendre ce que vous entendez par tout ça (notamment la
> > partie "piloter la transaction à l'intérieur du déclencheur", à moins
> > que ça ne soit une redite de  l'argument précédent).
> >
> > PostgreSQL permet la modification de la ligne renvoyée par le trigger
> > (record NEW pour les opérations INSERT, COPY et UPDATE).
> 
> Oui, mais pas la table entière vu que PG ne permet que des déclencheurs 
> FOR EACH ROW, alors que les déclencheurs SQL Server sont FOR EACH 
> STATEMENT, c'est à dire déclenchés une seule fois quelque soit le nombre 
> ede lignes impactées.
> 

La formulation n'est pas vraiment exacte. PostgreSQL accepte des
triggers FOR EACH ROW et FOR EACH STATEMENT. Par contre, il n'est
possible d'accéder (et du coup de modifier) à la ligne qui a déclenché
le trigger que dans le cas du FOR EACH ROW. Dans le cas du FOR EACH
STATEMENT, les variables OLD et NEW ne sont pas initialisées.


-- 
Guillaume
http://blog.guillaume.lelarge.info
http://www.dalibo.com
PostgreSQL Sessions #3: http://www.postgresql-sessions.org


In response to

pgsql-fr-generale by date

Next:From: Dimitri FontaineDate: 2012-01-04 10:53:51
Subject: Re: Re : Migration SQL Serveur 2008 vers PostgreSQL
Previous:From: Hervé PiedvacheDate: 2012-01-04 10:51:29
Subject: Re: Migration SQL Serveur 2008 vers PostgreSQL

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group