Créer et utiliser votre première table.

PostgreSQL est une base de données fortement et strictement typée. Dans une table PostgreSQL, un entier est un entier, une chaîne de caractères est une chaîne de caractères et on ne peut utiliser l’un pour l’autre. C’est pour cela que lors de la création d’une table, il faut être précis et définir avec soin les noms et les types des colonnes. On peut également, pour chaque colonne, définir une valeur par défaut ou une contrainte particulière. Mais cesse de barvadages, créons notre première table.

Vous êtes connecté à une base, il suffit maintenant d’utiliser la commande create table.

tutorial=> create table famille (nom varchar(32),prenom varchar(32),date_de_naissance date);
CREATE TABLE
tutorial=>

Voilà, la table famille est créée, elle contient 3 colonnes, une pour le nom, une pour le prénom et une pour la date de naissance. On peut vérifier la structure de cette table avec la commande \d suivi du nom de la table.

tutorial=> \d famille
                           Table "public.famille"
      Column       |         Type          | Collation | Nullable | Default
-------------------+-----------------------+-----------+----------+---------
 nom               | character varying(32) |           |          |
 prenom            | character varying(32) |           |          |
 date_de_naissance | date                  |           |          |

tutorial=>

On peut maintenant insérer des enregistrements dans la table:

tutorial=> insert into famille(nom,prenom,date_de_naissance) values('Dupont','Michel','1956-12-31');
INSERT 0 1
tutorial=>

Et enfin visionner le contenu de la table:

tutorial=> select * from famille;
  nom   | prenom | date_de_naissance
--------+--------+-------------------
 Dupont | Michel | 1956-12-31
(1 row)

tutorial=>

On peut ainsi rajouter des enregistrements à l’infini (dans la limite de la place disponible dans l’ordinateur).

Créer une table sur le modèle d’une table existante

On peut très bien créer une table sur le modèle d’une table existante:

tutorial=> create table famille_3 (like famille);
CREATE TABLE
tutorial=> select * from famille_3;
 nom | prenom | date_de_naissance | id | residence
-----+--------+-------------------+----+-----------
(0 rows)

tutorial=>

La même requête, mais cette fois en recopiant les données contenues dans la table modèle:

tutorial=> create table famille_2 as table famille;
SELECT 4
tutorial=> select * from famille_2;
  nom   |  prenom   | date_de_naissance | id | residence
--------+-----------+-------------------+----+-----------
 Dupont | Michel    | 1956-12-31        |  2 | Paris
 Dupont | Thomas    | 2010-09-04        |  3 | Paris
 Dupont | Madelaine | 1960-11-28        |  5 | Paris
 Dupont | Sophie    | 2012-02-07        |  4 | Paris
(4 rows)

tutorial=>

Ou en ne recopiant que partiellement les données de la table modèle, selon un ou plusieurs critère prédéfinis:

tutorial=> create table famille_4 as select * from famille where date_de_naissance < '2000-01-01';
SELECT 2
tutorial=> select * from famille_4;
  nom   |  prenom   | date_de_naissance | id | residence
--------+-----------+-------------------+----+-----------
 Dupont | Michel    | 1956-12-31        |  2 | Paris
 Dupont | Madelaine | 1960-11-28        |  5 | Paris
(2 rows)

tutorial=>

index suite…