#1 Fri 17 April 2020 16:14
- Theos2000
- Participant assidu
- Date d'inscription: 15 Jun 2015
- Messages: 221
Postgres convertir texte en array
Bonjour, j''ai une colonne que j'ai converti en tableau, mais suite a une restauration de ma base ,postgres le lit comme du texte
ex :{010010000} => Text .
Or je cherche une manipulation pour dans un update le transformer en tableau => {010010000} text []
Si je refais un array dessus ca ne va pas puisque je me retrouve avec ce genre de résultat {"{920640103}"}
Est ce que quelqu'un aurai une solution ou tombé sur un cas similaire ?
Merci
Hors ligne
#2 Fri 17 April 2020 16:25
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: Postgres convertir texte en array
Bonjour,
Un cast devrait suffire:
Code:
select '{010010000}'::text[] as asarray, pg_typeof('{010010000}'::text[]);
Si votre colonne est de type text, vous ne pourrez pas faire d'update direct, il faudra changer le type de text -> text[].
Pour cela, il faut utilser alter table ... alter column ... using, par exemple:
Code:
create table test ( msg text ); insert into test values ('{010010000}'); update test set msg = msg::text[]; select msg, pg_typeof(msg) from test; -- msg pg_typeof -- {010010000} text alter table test alter column msg type text[] using cast(msg as text[]); select msg, pg_typeof(msg) from test; --msg pg_typeof --{010010000} text[]
Nicolas
Hors ligne
#3 Wed 22 April 2020 07:20
- Theos2000
- Participant assidu
- Date d'inscription: 15 Jun 2015
- Messages: 221
Re: Postgres convertir texte en array
Super merci ça semble bien fonctionner pour le cast. Par contre pour le update moins bien je vais donc passer par un create table. C'est vraiment sympa merci
Hors ligne
#4 Wed 22 April 2020 10:43
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: Postgres convertir texte en array
Bonjour,
Un update ne peut marcher que si la valeur qu'on affecte a la colonne a le meme type que la colonne.
Sinon, il faut faire un alter table ... using ..., qui non seulement change le type de la colonne mais fait l'update aussi (il change le type en utilisant l'expression après le 'using'.
Donc, vous pouvez changer le type d'une colonne qui contient des valeurs, pas besoin de recréer la table pour cela.
Nicolas
Hors ligne
#5 Thu 23 April 2020 22:25
- Theos2000
- Participant assidu
- Date d'inscription: 15 Jun 2015
- Messages: 221
Re: Postgres convertir texte en array
CQFD merci ca marche bien !
Hors ligne