Vous n'êtes pas identifié(e).
Pages : 1
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
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
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
Ok. La table est en WITH OIDS ? Quelle est la version du moteur ?
Marc.
Hors ligne
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
select version();
Marc.
Hors ligne
select version();
Je suis en 7.4.17 et j'utilise pgAdmin en version 1.10.3
Hors ligne
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
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
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
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
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
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.
Marc.
Hors ligne
INSERT INTO table1 (champ1,champ2,champ3MD5)
SELECT champ11, champ22, MD5(champ11)
FROM table2Jamais vu ça. Ça ne veut pas dire que ça n'existe pas, mais j'en doute
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.
C'est la forme du INSERT qui vous chagrine ou la fonction MD5 en plein milieu ?
Merci à vous en tout cas
Hors ligne
non, c'est que md5 n'existe pas, par défaut
Marc.
Hors ligne
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 ).
Guillaume.
Hors ligne
Tiens donc. Mais je t'interdis de me contredire quand même
Savais pas qu'elle était là même sans pgcrypto
Marc.
Hors ligne
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 ).
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
Oui, sans souci, ça marchera très bien…
Désolé, j'aurais juré qu'elle était dans le module crypto, avec les autres
Marc.
Hors ligne
Oui, sans souci, ça marchera très bien…
Désolé, j'aurais juré qu'elle était dans le module crypto, avec les autres
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
Pages : 1