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

Re: Migration SQL Serveur 2008 vers PostgreSQL

From: Ronan Dunklau <rdunklau(at)gmail(dot)com>
To: "F(dot) BROUARD / SQLpro" <sqlpro(at)club-internet(dot)fr>
Cc: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: Migration SQL Serveur 2008 vers PostgreSQL
Date: 2012-01-05 09:40:08
Message-ID: 4F056FF8.9070704@gmail.com (view raw or flat)
Thread:
Lists: pgsql-fr-generale
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1


> Voici un exemple de transactions infaisable sous PG :
> 
> CREATE TABLE T1 (C1 INT); CREATE TABLE T2 (C2 INT CHECK (C2 > 0)) 
> CREATE TABLE T3 (C3 INT); GO
> 
> CREATE PROCEDURE P_INSERT_TRANSACTION @VAL1 INT AS BEGIN -- 
> demarrage d'une transaction BEGIN TRANSACTION; -- test de validité
>  BEGIN TRY INSERT INTO T1 VALUES (@VAL1); INSERT INTO T2 VALUES 
> (@VAL1); COMMIT TRANSACTION; END TRY -- en cas d'erreur BEGIN CATCH
> IF XACT_STATE() <> 0 ROLLBACK TRANSACTION; INSERT INTO T3 VALUES
> (@VAL1); END CATCH END; GO
> 
> -- permier test réussi : EXECUTE P_INSERT_TRANSACTION 1; GO
> 
> -- resultats : SELECT * FROM T1; SELECT * FROM T2; SELECT * FROM 
> T3;
> 
> C1 ----------- 1
> 
> C2 ----------- 1
> 
> C3 -----------
> 
> -- second test échec : EXECUTE P_INSERT_TRANSACTION -1 GO
> 
> -- resultats : SELECT * FROM T1; SELECT * FROM T2; SELECT * FROM 
> T3;
> 
> 
> C1 -----------
> 
> C2 -----------
> 
> C3 ----------- -1
> 
> La procédure insère dans les tables T1 et T2 dans la cadre d'une 
> transaction et, en cas de viol de la contrainte CHECK, annule la 
> transaction et insère dans la table T3...

Pour ce point précis, il me semble que la procédure suivante remplit
le même office, à moins que je n'aie raté un point ?

create or replace function p_insert_transaction(val1 integer) returns
void as $$
BEGIN
  BEGIN
    insert into t2 values (val1);
    insert into t1 values (val1);
  EXCEPTION WHEN INTEGRITY_CONSTRAINT_VIOLATION THEN
    insert into t3 values(val1);
  END;
END;
$$ language 'plpgsql';

La documentation précise que lorsqu'une erreur survient dans un tel
bloc, toute modification de l'état de la base de donnée est annulée.


- -- 
Ronan Dunklau
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.18 (GNU/Linux)

iQEcBAEBAgAGBQJPBW/qAAoJECTYLCgFy323BpYH/1kcrkeuwS+JICU97nlwAOo/
dPiVrEDhjaRUb6bf41CdcJuLe/AXDGjZDYh0oDfsI8na8hDTmVfVzVlT0WTF7ole
sXw2FPLqxLaCHj2qUs9IWvX6B/nFLUuxkYgwg97BD2DhXCTDXzF65wsEu3bb2zar
ZTYpsYpBgdAuod4W1pWWZaPnboqFwc8icphR/Ffn+khgzLaBGfZdYu1dU3Vww7oi
yJwqovXbatshiJ1OxL35uLbyojiSXD44IeyXcpAk1i8mhHFsTDpqXyA/NK+a3YQV
tUj5jBo5RCnmmJLQxBTCiYDo9B6iLGXDb87H25aPuz3b1SQHnP0Jnu056Cs3qnw=
=fyQK
-----END PGP SIGNATURE-----

In response to

Responses

pgsql-fr-generale by date

Next:From: Dimitri FontaineDate: 2012-01-05 10:00:43
Subject: Re: Migration SQL Serveur 2008 vers PostgreSQL
Previous:From: F. BROUARD / SQLproDate: 2012-01-05 08:59:52
Subject: Re: Migration SQL Serveur 2008 vers PostgreSQL

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