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
Views: Raw Message | Whole Thread | Download mbox | Resend email
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

Browse pgsql-fr-generale by date

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