PostgreSQL
La base de données la plus sophistiquée au monde.

Ouverture de session

Navigation

Contactez-nous

Administration du site :
"equipe chez postgresqlfr point org"

Contact presse :
"fr chez postgresql point org"

Contact association :
"bureau chez postgresqlfr point org"

Questions PostgreSQL :
 IRC :
  serveur irc.freenode.net
  canal #postgresqlfr

Recherche

Accéder aux archives

« Octobre 2008  
Lun Mar Mer Jeu Ven Sam Dim
  2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31  

Syndication

Flux XML

Sondage

Quelle est la version de PostgreSQL la plus répandue sur vos serveurs ?
8.3
10%
8.2
42%
8.1
40%
8.0
2%
7.4
6%
7.3 ou antérieure
0%
Nombre de votes: 48

update en série

Technique - général | update en série

Par jackt81 le 06/07/2005 - 14:59

Bonjour,
cette fois, j'ai vraiment besoin de vos lumières. Pour des raisons de mobilité, je suis amené à emporter sur un portable, 1 ou plusieurs dossiers issus d'une base centrale.
j'ai réussi le transfert vers le portable, grâce à la commande :
SELECT * INTO table_temp from table_source where dossier in (une liste de dossiers)
copy table_temp to '/rep/table_temp.txt'
le tout sur 15 tables dépendantes de la fiche dossier (factures, règlements, etc.)
je réintègre par COPY sur mon portable. ça, ça fonctionne.

Dans le sens inverse, je dois faire des update. Sachant que certaines des tables comportent plus de 50 colonnes, connaissez-vous une méthode pour faire un update de toutes les colonnes en une fois (sans passer par set col1 = .., col2 = .., etc.) ?

j'utilisais avant Mysql, et la commande REPLACE into matable VALUES(...), (identique à INSERT, mais remplaçant toutes les colonnes par le contenu du replace).

Merci de me répondre.

Jack

Options d'affichage des commentaires

Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder les paramètres" pour activer vos changements.

Bonjour Tu devrais regarde

Christophe Chauvet/ = 6 Juillet, 2005 - 17:20

Bonjour

Tu devrais regarder du coté du SELECT FOR UPDATE, je pense que c'est la solution de ton problème.

KrysKool


Merci, je suis parti sur aut

jackt81/ = 7 Juillet, 2005 - 09:53

Merci,
je suis parti sur autre chose. Il faut dire que je programme en langage windev, et c'est pas toujours net.
actuellement, je récupère les noms de colonnes,et les types de colonnes de mes tables. ça me permet de construire une requète d'update automatiquement.
j'aimerais bien récupérer le nom du type, mais je peux faire sans.
la requète est :
SELECT a.attname, a.atttypid
from pg_type as b, pg_class as c, pg_attribute as a
WHERE c.relfilenode=a.attrelid
and a.attrelid=b.typrelid
and c.relname='factures'
and attname not in ('tableoid','cmax','xmax','cmin','xmin','oid','ctid')

ça me donne par exemple :
montant_ht 1700 (oĂą 1700 est l'oid (dans pg_type) de 'numeric')
je n'ai pas réussi à récupérer directement le nom (le pg_type.typname me retourne le nom de la table (!)
je débute en postgresql, et rentrer dans les catalogues système n'est pas le plus simple plour un newbie :)
si tu vois comment modifier la requète pour obtenir le nom du type de colonne, n'hésite-pas ! ;)

merci encore


RESOLU

jackt81/ = 7 Juillet, 2005 - 11:05

la requète :
SELECT pg_attribute.attname, pg_type.typname
FROM pg_attribute
INNER JOIN pg_class ON pg_attribute.attrelid = pg_class.oid
INNER JOIN pg_type ON pg_attribute.atttypid=pg_type.oid
WHERE pg_attribute.attnum > 0
AND pg_class.oid IN (SELECT oid FROM pg_class WHERE relname = 'factures')
AND pg_type.oid IN (SELECT oid FROM pg_type)
ORDER BY pg_attribute.attnum;

a résolu tous mes problèmes !


© PostgreSQLFr, tous droits rĂ©servĂ©s.
Site déclaré à la CNIL sous le numéro 1074678, conformément à la Loi en vigueur.