[PosteGre] - Transformation colonne smallint en boolean

- Transformation colonne smallint en boolean [PosteGre] - SQL/NoSQL - Programmation

Marsh Posté le 25-08-2020 à 15:55:36    

Bonjour,
 
Je change de SGBD entre MySQL et PostGre.
 
Pour ce faire, j'ai utilisé pgloader mais ce dernier a transformé certaine de mes tables.
 
Par exemple, je me retrouve avec une table remplie mais dont l'une des 4 colonnes est une colonne typée smallint (0 ou 1) ou lieu de Booléen (true, false)
 
J'ai donc créé une table bis avec ma colonne au bon typage booleen.
 
Le question est de savoir comment la remplir à partir de la table initiale en faisant la mise jour dans la colonne booleen; 1 = true, 0 = false ?  
 
J'ai bien fait le insert into 'nouvelle_table' (col1, col2, col3, col4) select (col1, col2, col3, col4) from 'table_intiale'
 
Mais, comme je me l'attendais, j'ai un message d'erreur "column col4 if of type boolean but expression if of type smallint"
 
Toute aide est la bienvenue.
 
Merci

Reply

Marsh Posté le 25-08-2020 à 15:55:36   

Reply

Marsh Posté le 25-08-2020 à 17:43:14    

Salut,

 

Fais juste :

Code :
  1. col4 <> 0
 

Il n'était pas nécessaire de créer une table, une colonne aurait suffit (tu droppais ensuite la colonne smallint et renommait celle en bool qui la remplaçait, ou, encore mieux, par un :

Code :
  1. ALTER TABLE table ALTER colonne TYPE BOOL USING colonne <> 0;


)


Message édité par pluj le 25-08-2020 à 17:48:10
Reply

Marsh Posté le 25-08-2020 à 18:24:01    

Narkadaie a écrit :

Bonjour,
 
Je change de SGBD entre MySQL et PostGre.
 
Pour ce faire, j'ai utilisé pgloader mais ce dernier a transformé certaine de mes tables.
 
Par exemple, je me retrouve avec une table remplie mais dont l'une des 4 colonnes est une colonne typée smallint (0 ou 1) ou lieu de Booléen (true, false)
 
J'ai donc créé une table bis avec ma colonne au bon typage booleen.
 
Le question est de savoir comment la remplir à partir de la table initiale en faisant la mise jour dans la colonne booleen; 1 = true, 0 = false ?  
 
J'ai bien fait le insert into 'nouvelle_table' (col1, col2, col3, col4) select (col1, col2, col3, col4) from 'table_intiale'
 
Mais, comme je me l'attendais, j'ai un message d'erreur "column col4 if of type boolean but expression if of type smallint"
 
Toute aide est la bienvenue.
 
Merci


 
Sinon, sache que c'est normal, pour MySQL, "BOOL is the synonym of TINYINT". Donc à l'export vers PostgreSQL, celui-ci voit TINYINT.


---------------
Expert en expertises
Reply

Marsh Posté le 26-08-2020 à 10:47:21    

Un grand merci à vous deux :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed