CREATE TABLE
CREATE TABLE crée une nouvelle table initialement vide dans la base de données courante. La table appartient à l'utilisateur qui exécute cette commande.
Si un nom de schéma est donné (par exemple, CREATE TABLE monschema.matable ...
), alors la table est créée dans le schéma spécifié. Dans le cas contraire, elle est créée dans le schéma courant. Les tables temporaires existent dans un schéma spécial, il n'est donc pas nécessaire de fournir un nom de schéma lors de la création d'une table temporaire. Le nom de la table doit être distinct du nom des autres tables, séquences, index, vues ou tables distantes dans le même schéma.
Le synopsis général de la commande est :
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] nom_table ( [
{ nom_colonne type_donnees [ COLLATE collation ] [ contrainte_colonne [ ... ] ]
| contrainte_table
| LIKE table_source [ option_like ... ] }
[, ... ]
] )
[ INHERITS ( table_parent [, ... ] ) ]
[ WITH ( parametre_stockage [= valeur] [, ... ] ) | WITH OIDS | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE nom_tablespace ]
Voir la documentation de PostgreSQL pour le détail des paramètres.
Il est possible de créer des tables temporaires qui sont supprimées à la fin de la session avec le paramètre TEMPORARY ou TEMP.
Remarque :
Les tables temporaires sont placées dans un schéma temporaire ‘pg_temp_#' (# est un numéro).
Exemple de création de table :
CREATE TABLE personnes (id SERIAL PRIMARY KEY, nom VARCHAR(50), prenom VARCHAR(50)) ;
permet de créer une table des personnes avec un identifiant qui est un numéro automatiquement incrémenté comme clef primaire.
Comme nous l'avons vu au module 2, Sous PgAdmin il est possible de créer une table par clic droit sur un schéma → ajouter un objet → Ajouter une table. Les différents onglets permettent de fixer les paramètres.
Sous DBManager, comme nous l'avons également vu, il est possible de passer par le menu Table :

Fondamental : Le type du champ de géométrie
Il est important de typer les champs de géométrie, ce qui permet également en option de préciser le système de projection utilisé pour le champ.
On utilise l'instruction GEOMETRY( [type], [srid])
Exemple : CREATE TABLE personnes (id SERIAL PRIMARY KEY, nom VARCHAR(50), geom GEOMETRY(POINT, 2154))
Le [type
] peut être :
POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION, POINTM, LINESTRINGM, POLYGONM, MULTIPOINTM, MULTILINESTRINGM, MULTIPOLYGONM, GEOMETRYCOLLECTIONM
.
Le type GEOMETRY
est utilisé en cas de géométrie hétérogène. Il n'est pas recommandé pour les besoins courants de stocker des géométries hétérogènes dans une même table.
Le [srid]
defini est le code EPSG (2154 pour le RGF93/Lambert 93).
Une table peut contenir plusieurs champs de géométrie avec potentiellement des types et des SRID différents.
En ajout de couche PostGIS sous QGIS la boîte d'ouverture indique les couches pour lesquelles la géométrie et le type ne sont pas précisés.
(il est possible de le préciser à ce moment pour la session)
Sous DBManager on identifie rapidement le type de géométrie d'une couche. Attention aux couches de type GEOMETRY qui peuvent contenir des données hétérogènes.
Complément :
Il est possible de créer une table qui soit le résultat d'une requête SQL :
exemple :
CREATE TABLE exemple AS (SELECT * FROM commune) ;
Le cas échéant il faudra typer explicitement le résultat d'une fonction donnant une nouvelle géométrie.
Exemple st_buffer(geom)
retourne par défaut un objet de type GEOMETRY
, si on veut indiquer en création d'une couche qu'il s'agit d'un POLYGON on utilisera :
CREATE TABLE exemple AS (SELECT id,..., st_buffer(geom) : : geometry(POLYGON, 2154))