2017-10-21 120 views
0

Je suis un tutoriel plus ancien apprentissage Postgres, il est donc possible que quelque chose a changé depuis sa publication. Dans le tutoriel (en utilisant psql) je crée une table puis je fais quelques instructions insert. Voici le tutoriel et correspondant psql commandes qui provoquent l'erreur:PostgreSQL: INSERT INTO erreur de syntaxe

http://www.postgresqlforbeginners.com/2010/11/create-table-and-constraints.html

create table people(
    id int PRIMARY KEY, 
    name varchar NOT NULL 
); 
insert into people(0,'Steve Jobs'); 
insert into people(1,'Mike Markkula'); 
insert into people(2,'Mike Scott'); 
insert into people(3,'John Sculley'); 
insert into people(4,'Michael Spindler'); 
insert into people(5,'Gil Amelio'); 
insert into people(6,'Mike Scott'); 

Je reçois cette erreur pour chaque instruction d'insertion:

ERROR: syntax error at or near "0" 
LINE 1: insert into people(0,'Steve Jobs'); 
         ^

J'ai essayé coller de copier, en capitalisant sql commandes (par exemple INSERT), en exécutant la commande à partir de shell en dehors de psql, en ajoutant des espaces, en utilisant " au lieu de ' guillemets ... Tous les résultats en t les mêmes erreurs. Est-ce que quelque chose a changé ou est-ce que je fais quelque chose de mal?

+3

Il vous manque le mot-clé 'values': https://www.postgresql.org/docs/current/static/sql-insert.html Ce tutoriel est tout à fait faux –

+0

Oui, c'était ça. Je pensais que j'avais essayé cela aussi, peut-être que j'ai fait 'value' au lieu de' values'. Quoi qu'il en soit, merci – DjH

Répondre

3

Le problème est le values manquant (comme indiqué dans un commentaire).

Je veux faire quelques suggestions. Tout d'abord, chaque fois que vous utilisez insert, vous devez toujours lister les colonnes. Ceci est particulièrement important si vous apprenez la langue - vous devriez apprendre de bonnes habitudes. Deuxièmement, vous n'avez pas besoin de plusieurs inserts. Un chemin plus court pour insérer plusieurs lignes est:

insert into people (id, name) 
    values (0,'Steve Jobs'), 
      (1,'Mike Markkula'), 
      (2,'Mike Scott'), 
      (3,'John Sculley'), 
      (4,'Michael Spindler'), 
      (5,'Gil Amelio'), 
      (6,'Mike Scott'); 

Et vous devriez en apprendre davantage sur serial. Une façon plus commune d'écrire ce code serait:

create table people (
    id serial PRIMARY KEY, 
    name varchar NOT NULL 
); 

insert into people (name) 
    values ('Steve Jobs'), 
      ('Mike Markkula'), 
      ('Mike Scott'), 
      ('John Sculley'), 
      ('Michael Spindler'), 
      ('Gil Amelio'), 
      ('Mike Scott'); 

Le id est attribué automatiquement par la base de données (à partir de 1 plutôt que 0).

Je devrais ajouter: Je suis personnellement mal à l'aise d'avoir varchar sans une longueur. C'est très bien dans Postgres, mais certaines bases de données l'interpréteraient comme varchar(1).