Blog

Blog

Comment faire si on a un mot réservé dans un nom de colonne sous postgreSQL ?

PostgreSQL gère une liste de mots réservés et une liste de mot non réservés, mais un peu réservés quand même... Bref, il peut laisser un outil créer une table avec un mot réservé comme nom de colonne et à vous de galérer après pour la modifier!
J'ai connu l'expérience avec openstreetmap qui nomme un des attributs "natural". "natural" n'est pas u mot clé réservé de la norme SQL, par contre, il est réservé pour PostgreSQL... Je ne me suis rendue compte du problème qu'une fois l'import effectué avec shp2pgsql.

Le préfixe

Pour une requête de sélection, il suffit de préfixer le nom de colonne avec le nom de la table.
SELECT *
FROM maTable
WHERE maTable.natural="gnagnagna";
Et ça marche...

Et pour le DDL ?

PostgreSQL n'accepte pas d'alias dans le DDL, c'est d'ailleurs un des écueils de la migration Oracle vers PostgreSQL. Il faut donc arriver à lui dire que ce n'est qu'un identifiant. ça se fait tout bêtement en mettant des guillemets autour de l'identifiant.
ALTER maTable RENAME COLUMN "natural" TO naturelle;

Pour aller plus loin

Vous pouvez consulter la documentation PostgreSQL:

Quelle versions sous postgreSQL et postGIS ?

Il arrive parfois qu'on se pose des questions toutes bêtes... On veut consulter la documentation postGIS et là, trou de mémoire, sous quelle version de postGIS suis-je ?PostGIS l'a prévu!

La fonction PostGIS_full_version()

C'est tout simple! Une ptite requête et zou!
SELECT PostGIS_full_version();
Et la réponse arrive :
"POSTGIS="2.1.5 r13152" GEOS="3.4.2-CAPI-1.8.2 r3921" PROJ="Rel. 4.8.0, 6 March 2012" GDAL="GDAL 1.9.2, released 2012/10/08" LIBXML="2.7.6" LIBJSON="UNKNOWN" RASTER"
Pour une fois que c'est simple! Enjoy!

Et pour postgreSQL ?

C'est tout aussi simple!
SELECT version();

Pour aller plus loin

Vous pouvez consulter la documentation PostGIS et PostgreSQL: