PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 25/06/2014 16:20:46

Dezqs
Membre

Migration Oracle vers PostgreSQL - procédures stockées

Bonjour,

Actuellement en pleine migration d'oracle vers postgre, je suis confronté à un problème de type dans de nombreuses procédures stockées.

En effet, dans oracle, les colonnes et les procédures utilisaient le type "Number"...

Suite à la migration, mes colonnes sont donc maintenant du type real, bigint, double precision,... et les paramètres (numériques) des procédures de type "bigint"

Pour simplifier la modification des procédures stockées, je voulais savoir s'il était possible de modifier les colonnes de types "real" afin qu'elles soient de type "double precision" et quels seraient les éventuels impacts ?

Merci

Hors ligne

#2 25/06/2014 22:30:57

gleu
Administrateur

Re : Migration Oracle vers PostgreSQL - procédures stockées

Vous pouvez le faire, notamment avec ora2pg.

Hors ligne

#3 26/06/2014 09:24:58

Dezqs
Membre

Re : Migration Oracle vers PostgreSQL - procédures stockées

Bonjour,

Ora2Pg a déjà été utilisé. Ce que je souhaite faire c'est un alter table pour modifier mes colonnes de type "real" en "double precision" et savoir quels seraient les éventuels impacts.
En effet, ça me simplifierais la tâche pour la modification de mes procédures de n'avoir à gérer que les types "bigint" et "double precision"...

J'espère être assez clair...

Merci

Hors ligne

#4 27/06/2014 23:57:43

gleu
Administrateur

Re : Migration Oracle vers PostgreSQL - procédures stockées

real est sur 4 octets alors que double precision est sur 8 octets. Donc déjà, vous doublez la place prise pour stocker ces types de données. En dehors de cela, je ne connais aucun autre impact.

Hors ligne

#5 28/06/2014 12:48:43

cedric
Membre

Re : Migration Oracle vers PostgreSQL - procédures stockées

Dezqs a écrit :

Ce que je souhaite faire c'est un alter table pour modifier mes colonnes de type "real" en "double precision" et savoir quels seraient les éventuels impacts.
En effet, ça me simplifierais la tâche pour la modification de mes procédures de n'avoir à gérer que les types "bigint" et "double precision"...
Merci

L'impact est principalement applicatif, la précision change.

# select 1.12345::real = 1.12345::double precision; 
renvoie false.

Donc en appliquant des conversions vous allez potentiellement obtenir des égalités là où il ne devrait pas y en avoir. On n'utilise habituellement pas ces types de données pour ce genre d'opération ceci dit.
Si l'applicatif est compatible avec ce changement, en effet, coté PostgreSQL, l'impact est sur le volume de stockage, modulo ce qui suit.

Attention aussi aux fonctions d’agrégation statistique qui vont être affectées par le format de stockage initial (avg, variance, stddev, ...):

# create table foo 
      as select ('1.'||n)::real as s,('1.'||n)::double precision as d from generate_series(1,99999) g(n);
# select avg(s),avg(d) from foo;
       avg                   |      avg       
------------------------+----------------
 1.54997749977667 | 1.549977499775
# alter table foo alter COLUMN s type double precision;
# select avg(s),avg(d) from foo;
       avg        |      avg       
------------------+----------------
 1.54997749977667 | 1.549977499775

NOTE: les fonctions de stats retournent "double precision" dans tous les cas de paramètres flottant en entrée, on note que le résultat est différent ci-dessus alors que:

# truncate table foo;
# insert into foo select ('1.'||n)::double precision as s,('1.'||n)::double precision as d from generate_series(1,99999) g(n);
# select avg(s),avg(d) from foo;
      avg       |      avg       
----------------+----------------
 1.549977499775 | 1.549977499775

Donc peut-être auriez-vous intérêt à caster lors de l'import initial, et pas dans un second temps.


Cédric Villemain +33 (0)6 20 30 22 52
http://2ndQuadrant.fr/
PostgreSQL: Support 24x7 - Développement, Expertise et Formation

Hors ligne

#6 30/06/2014 10:19:21

Dezqs
Membre

Re : Migration Oracle vers PostgreSQL - procédures stockées

Bonjour,

Merci pour vos réponses.

Pour l'augmentation du volume de stockage je m'en doutais, mais ce ne sera pas forcément dérangeant dans notre cas.

Par contre je n'avais pas du tout pensé aux problèmes liés aux conversions...
Mais il me semble que les procédures n'utilisent pas de fonctions d’agrégations statistiques.

Après je suis d'accord sur le fait que la conversion aurait pu être réalisée en amont, coté applicatif, mais j'aurais quand même dû modifier les déclarations des procédures car depuis la migration tout les paramètres de type "number" d'oracle ont été remplacés par "bigint"...

En tout cas merci pour vos réponses smile

Dernière modification par Dezqs (30/06/2014 10:19:48)

Hors ligne

Pied de page des forums