#1 Sun 21 March 2021 10:33
- Romary
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 17 Jun 2011
- Messages: 211
Postgresql 9.3 ajouter des champs avant insert
Bonjour, j'aimerais ajouter des lignes d'une table à l'autre tout en ajoutant les champs manquant dans la table de destination au préalable. Avez vous une idée ?
Bien cordialement,
Romary
Hors ligne
#2 Mon 22 March 2021 09:53
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1549
Re: Postgresql 9.3 ajouter des champs avant insert
Bonjour,
Avec un insert into ... select ..., vous pouvez choisir les lignes à insérer et rajouter des valeurs littérales dans le select pour completer les colonnes:
Code:
insert into matable (col1, col2, col3) select 'toto', t.col2, t.col2 from autretable t where ...
la colonne matable.col1 prendra la valeur 'toto' pour toutes les lignes insérées.
Nicolas
Hors ligne
#3 Mon 22 March 2021 10:34
- Romary
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 17 Jun 2011
- Messages: 211
Re: Postgresql 9.3 ajouter des champs avant insert
Bonjour, cette requête je la connais. Ce que je veux c'est ajouter des champs à la table avant l'import mais de façon automatique. Si le champ n'existe pas alors add column... Cela existe ?
Hors ligne
#4 Mon 22 March 2021 11:55
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1549
Re: Postgresql 9.3 ajouter des champs avant insert
Ah ok. Le mieux pour cela est de passer par une fonction plpgsql ou un bloc anonyme (do... ).
Dans ce code, vous pourrez lister les colonnes d'une table (select * from information_schema.columns where table_name = '' and schema_name = '') et s'il en manque, en ajouter.
PLPGSQL est proche du sql, assez facile à écrire et permet de faire bcp de choses en SQL.
Nicolas
Hors ligne
#5 Mon 22 March 2021 13:22
- Romary
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 17 Jun 2011
- Messages: 211
Re: Postgresql 9.3 ajouter des champs avant insert
Merci je vais regarder ce que je trouve de ce côté là alors.
Hors ligne