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

Tester si une colonne existe

Technique - général | Tester si une colonne existe

Par Tiennet le 30/03/2007 - 21:25

Bonjour,

dans une application utilisant postgres, je dois remplir une colonne qui peut exister ou non, je voudrais un test qui me dise si elle existe ou non puis la créer éventuellement puis la remplir. J'ai trouvé ceci sur internet, peut-être d'ailleurs issu de ce forum:

Tu dclares v_int INTEGER, puis :

SELECT INTO v_int count(attrelid) from pg_attribute,pg_class
WHERE pg_class.relname = ''Ta_table'' AND attname = ''Ta_colonne''
AND attrelid = pg_class.oid;
IF (v_int = 0) THEN
--ALTER table
alter table "Ta_table" add column "Ta_colonne" timestamp ;
END IF;

mais je ne m'y connais pas assez pour pouvoir l'utiliser? C'est du plpgsql? Faut-il l'inclure dans une fonction? Si c'est le cas, quelqu'un peut-il m'écrire une déclaration complète?
et m'expliquer comment l'utiliser?

Merci

Etienne

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.

Tester si une colonne existe

Tiennet/ = 1 Avril, 2007 - 19:26

J'ai essayé d'inclure dans une fonction plpgsql, cela donne ceci:

CREATE FUNCTION seried(varchar(12),varchar(10))
RETURNS void AS $$
DECLARE
v_int INTEGER;
BEGIN
SELECT INTO v_int count(attrelid) from pg_attribute,pg_class
WHERE pg_class.relname = $1 AND attname = $2
AND attrelid = pg_class.oid;
IF (v_int = 0) THEN
alter table $1 add column $2 numeric;
END IF;
END;
$$ LANGUAGE 'plpgsql';

J'obtiens le message d'erreur:
(ProgrammingError) syntax error at or near "$1" at character 14
QUERY: alter table $1 add column $2 numeric
CONTEXT: SQL statement in PL/PgSQL function "seried" near line 1

où est l'erreur?
Merci pour toute indication.
Etienne


Résolu

Tiennet/ = 2 Avril, 2007 - 08:51

Bon, j'avais lu un peu vite la doc et sauté le passage concernant mon problème, en utilisant EXECUTE, cela fonctionne.


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