Bonjour,
Pour mon application, j'ai créé un fichier SQL de patch qui ajoute des colonnes à des table préalablement créées :
L'éxécution de ce bout de code crée une table user_name de type character varying. Si on fait un select sur ack_event on obtient:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 CREATE OR REPLACE FUNCTION add_col( _tbl VARCHAR, -- Table _col VARCHAR, -- Column to add _type regtype -- Type of that column ) RETURNS BOOL AS $$ BEGIN -- Returns true if column has been added; false otherwise. IF EXISTS (SELECT DISTINCT column_name FROM information_schema.columns WHERE table_schema LIKE current_schema and table_name LIKE _tbl and column_name LIKE _col ) THEN -- Column already exists in that table of that schema: do nothing. RETURN false; END IF; -- Add column EXECUTE 'ALTER TABLE ' || _tbl || ' ADD COLUMN ' || _col || ' ' || _type; RETURN true; END; $$ language 'plpgsql'; SELECT add_col('ack_event', 'user_name', 'VARCHAR(30)');
En revanche si la table ack_event est créée directement avec la colonne username (de type VARCHAR(30) comme sur le patch), le type affiché dans la base est : character varying(30).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 | id | user_name | | bigint | character varying | |--------+-------------------+ | | |
Un select donne alors :
Pourquoi le passage de type en argument de fonction crée cette inconsistence ? Y a-t-il un moyen de corriger ça et d'avoir character varying(30) dans tous les cas ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 | id | user_name | | bigint | character varying(30) | |--------+-----------------------+ | | |
Partager