У меня есть следующий сценарий для составления таблицы:
-- Create State table.
DROP TABLE IF EXISTS "State" CASCADE;
CREATE TABLE "State" (
StateID SERIAL PRIMARY KEY NOT NULL,
StateName VARCHAR(50)
);
Это хорошо работает в инструментальном средстве формирования запросов PgAdmin. Но когда я пытаюсь выполнить его из командной строки с помощью psql:
psql -U postgres -d dbname -f 00101-CreateStateTable.sql
Я получаю синтаксическую ошибку как показано ниже.
2: ERROR: syntax error at or near ""
LINE 1:
^
psql:00101-CreateStateTable.sql:6: NOTICE: CREATE TABLE will create implicit sequence "State_stateid_seq" for serial column "State.stateid"
psql:00101-CreateStateTable.sql:6: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "State_pkey" for table "State"
CREATE TABLE
Почему я получаю синтаксическую ошибку с помощью psql а не с pgAdmin?
Запустите файл 00101 -CreateStateTable.sql через шестнадцатеричный дампер. Готов поспорить, у вас есть маркер UTF-16 в начале файла (перед символами комментария "-").
Какую версию (-и) вы используете? ЕСЛИ EXISTS поставляется с версией 8.2, возможно, вы используете psql с версией 8.1 или более ранней.