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 26/01/2011 11:36:40

iviewclear
Membre

Générer un OID dans un INSERT

Bonjour

Est-il possible de générer un OID en même temps que l'on fait un INSERT dans une table contenant déjà des enregistrements ?

Merci

Hors ligne

#2 26/01/2011 11:51:43

Marc Cousin
Membre

Re : Générer un OID dans un INSERT

Bonjour,

Plutôt que de répondre tout de suite à votre question: pourquoi voulez vous un OID ? Leur utilisation est fortement déconseillée.


Marc.

Hors ligne

#3 26/01/2011 11:54:02

iviewclear
Membre

Re : Générer un OID dans un INSERT

Marc Cousin a écrit :

Bonjour,

Plutôt que de répondre tout de suite à votre question: pourquoi voulez vous un OID ? Leur utilisation est fortement déconseillée.

Bonjour et merci

Oui je sais j'ai lu ça
Mais je suis en reprise de projet et de bases de données, et je n'ai pas trop le choix malheureusement
Et en plus, il existe un sérial dans toutes les tables....

Mais je suis obligé.

Hors ligne

#4 26/01/2011 11:59:38

Marc Cousin
Membre

Re : Générer un OID dans un INSERT

Ok. La table est en WITH OIDS ? Quelle est la version du moteur ?


Marc.

Hors ligne

#5 26/01/2011 12:03:57

iviewclear
Membre

Re : Générer un OID dans un INSERT

Marc Cousin a écrit :

Ok. La table est en WITH OIDS ? Quelle est la version du moteur ?

Oui les tables sont avec WITH OIDS.
Le moteur = La version de POSTGRES ?
SI oui comment fais-je pour l'obtenir ?

Merci

Hors ligne

#6 26/01/2011 12:19:01

Marc Cousin
Membre

Re : Générer un OID dans un INSERT

select version();


Marc.

Hors ligne

#7 26/01/2011 12:21:18

iviewclear
Membre

Re : Générer un OID dans un INSERT

Marc Cousin a écrit :

select version();

Je suis en 7.4.17 et j'utilise pgAdmin en version 1.10.3

Hors ligne

#8 26/01/2011 12:25:24

Marc Cousin
Membre

Re : Générer un OID dans un INSERT

Ah. En 7.4.17, il n'y a pas de façon simple de récupérer le résultat de l'insertion. Vous serez obligé de refaire un SELECT après l'insert pour en récupérer le résultat.

Au passage, cette version n'est pas du tout conseillée en production. La branche 7.4 n'est plus maintenue. Et la dernière 7.4 est la 7.4.30.


Marc.

Hors ligne

#9 26/01/2011 12:34:47

iviewclear
Membre

Re : Générer un OID dans un INSERT

Marc Cousin a écrit :

Ah. En 7.4.17, il n'y a pas de façon simple de récupérer le résultat de l'insertion. Vous serez obligé de refaire un SELECT après l'insert pour en récupérer le résultat.

Au passage, cette version n'est pas du tout conseillée en production. La branche 7.4 n'est plus maintenue. Et la dernière 7.4 est la 7.4.30.

J'ai l'impression d'avoir du bol moi !!!!!
Bon si je résume je ne peux alors lors de l'insertion générer un OID ?
N'est-ce-pas le SGBD qui peut le faire si je ne le mentionne pas dans le INSERT ?

Je complète ma réflexion : mon applicatif PHP fait les insert mais ma page Web ne donne pas cet OID donc c'est bien le SGBD qui se charge de le générer, non ?
Excusez mon ignorance en la matière....

Est-ce le même souci pour un champ dans lequel je veux générer du MD5 ?

Merci pour vos réponses

Dernière modification par iviewclear (26/01/2011 12:38:05)

Hors ligne

#10 26/01/2011 12:52:13

Marc Cousin
Membre

Re : Générer un OID dans un INSERT

Quand vous faites l'insertion, si la table est WITH OIDS, la base génère d'elle même un OID pour chaque enregistrement. Par contre, si vous voulez avoir cet OID, vous serez obligé de faire un SELECT ensuite. Par ailleurs, vous ne le voyez pas par «select *» parce que c'est un champ caché. Il faut préciser la colonne oid explicitement dans le select.

Je ne vois pas le rapport avec les MD5. MD5, c'est un algorithme de hachage. On peut stocker un hash md5 dans un champ, mais c'est à vous de le faire (ou mettre un trigger qui le calcule pour vous…)


Marc.

Hors ligne

#11 26/01/2011 15:13:27

iviewclear
Membre

Re : Générer un OID dans un INSERT

Marc Cousin a écrit :

Quand vous faites l'insertion, si la table est WITH OIDS, la base génère d'elle même un OID pour chaque enregistrement. Par contre, si vous voulez avoir cet OID, vous serez obligé de faire un SELECT ensuite. Par ailleurs, vous ne le voyez pas par «select *» parce que c'est un champ caché. Il faut préciser la colonne oid explicitement dans le select.

Ok ça je crois avoir saisi.

Je ne vois pas le rapport avec les MD5. MD5, c'est un algorithme de hachage. On peut stocker un hash md5 dans un champ, mais c'est à vous de le faire (ou mettre un trigger qui le calcule pour vous…)

Je précise ma question : comme l'OID, je cherche à le générer automatiquement.
J'ai cru voir qu'on pouvait faire ceci :

INSERT INTO table1 (champ1,champ2,champ3MD5)
SELECT champ11, champ22, MD5(champ11)
FROM table2

Est-ce correct ?

Hors ligne

#12 26/01/2011 16:03:04

Marc Cousin
Membre

Re : Générer un OID dans un INSERT

INSERT INTO table1 (champ1,champ2,champ3MD5)
SELECT champ11, champ22, MD5(champ11)
FROM table2

Jamais vu ça. Ça ne veut pas dire que ça n'existe pas, mais j'en doute smile

Pour pouvoir faire du md5, déjà, il va vous falloir pgcrypto, qui est un module contrib.

Ensuite, vous pourrez utiliser des fonctions comme md5(). Mais ça restera des fonctions, auxquelles il faudra passer des paramètres.

http://docs.postgresql.fr/9.0/pgcrypto.html


Marc.

Hors ligne

#13 26/01/2011 16:21:35

iviewclear
Membre

Re : Générer un OID dans un INSERT

Marc Cousin a écrit :

INSERT INTO table1 (champ1,champ2,champ3MD5)
SELECT champ11, champ22, MD5(champ11)
FROM table2

Jamais vu ça. Ça ne veut pas dire que ça n'existe pas, mais j'en doute smile

Pour pouvoir faire du md5, déjà, il va vous falloir pgcrypto, qui est un module contrib.

Ensuite, vous pourrez utiliser des fonctions comme md5(). Mais ça restera des fonctions, auxquelles il faudra passer des paramètres.

http://docs.postgresql.fr/9.0/pgcrypto.html

C'est la forme du INSERT qui vous chagrine ou la fonction MD5 en plein milieu ?
Merci à vous en tout cas

Hors ligne

#14 26/01/2011 16:22:26

Marc Cousin
Membre

Re : Générer un OID dans un INSERT

non, c'est que md5 n'existe pas, par défaut smile


Marc.

Hors ligne

#15 26/01/2011 20:35:08

gleu
Administrateur

Re : Générer un OID dans un INSERT

Marc, ta journée a été apparemment chargée donc ne m'en veut pas si je te contredis. La fonction md5 existe bien en 7.4 (et sur les versions ultérieures aussi) :

b1=# select md5('pasdebol'), version();
               md5                |                                                 version                                                  
----------------------------------+----------------------------------------------------------------------------------------------------------
 5b8cf067ebc1a5a60362590efc4a1283 | PostgreSQL 7.4.30 on x86_64-unknown-linux-gnu, compiled by GCC gcc (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5
(1 row)

Beurk, beurk, ça fait un siècle que je n'avais pas utilisé une 7.4. On dirait un vieux DOS tout pourri (par rapport à une 9.0 bien sûr smile ).


Guillaume.

Hors ligne

#16 26/01/2011 20:42:43

Marc Cousin
Membre

Re : Générer un OID dans un INSERT

Tiens donc. Mais je t'interdis de me contredire quand même smile

Savais pas qu'elle était là même sans pgcrypto smile


Marc.

Hors ligne

#17 27/01/2011 10:43:47

iviewclear
Membre

Re : Générer un OID dans un INSERT

gleu a écrit :

Marc, ta journée a été apparemment chargée donc ne m'en veut pas si je te contredis. La fonction md5 existe bien en 7.4 (et sur les versions ultérieures aussi) :

b1=# select md5('pasdebol'), version();
               md5                |                                                 version                                                  
----------------------------------+----------------------------------------------------------------------------------------------------------
 5b8cf067ebc1a5a60362590efc4a1283 | PostgreSQL 7.4.30 on x86_64-unknown-linux-gnu, compiled by GCC gcc (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5
(1 row)

Beurk, beurk, ça fait un siècle que je n'avais pas utilisé une 7.4. On dirait un vieux DOS tout pourri (par rapport à une 9.0 bien sûr smile ).

Bonjour,
Ah cela me rassure car je lisais le contraire
du coup ma requête est-elle correcte comme cela ?

INSERT INTO table1 (champ1,champ2,champ3MD5)
SELECT champ11, champ22, MD5(champ11)
FROM table2;

suffit-il d'appeler la fonction MD5 comme je l'ai fait ?

Merci à vous

Hors ligne

#18 27/01/2011 10:48:02

Marc Cousin
Membre

Re : Générer un OID dans un INSERT

Oui, sans souci, ça marchera très bien…

Désolé, j'aurais juré qu'elle était dans le module crypto, avec les autres smile


Marc.

Hors ligne

#19 27/01/2011 10:49:54

iviewclear
Membre

Re : Générer un OID dans un INSERT

Marc Cousin a écrit :

Oui, sans souci, ça marchera très bien…

Désolé, j'aurais juré qu'elle était dans le module crypto, avec les autres smile

Y a pas de souci et je suis mal placé pour vous faire le leçon quand même lol²
Je vais essayer ça
Merci

Hors ligne

Pied de page des forums