Запуск сценария SQL через psql дает синтаксические ошибки, которые не возникают в PgAdmin - PullRequest
5 голосов
/ 30 марта 2010

У меня есть следующий скрипт для создания таблицы:

-- 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?

Ответы [ 4 ]

11 голосов
/ 30 марта 2010

Запустите ваш файл 00101-CreateStateTable.sql через шестнадцатеричный дампер. Держу пари, у вас есть маркер UTF-16 в начале файла (перед символами комментария "-").

3 голосов
/ 22 июля 2010

Для удаления последовательности BOM в Ubuntu вы можете использовать bomstrip, bomstrip-files

0 голосов
/ 25 октября 2011

Спасибо, ребята. Я боролся с этой проблемой в течение нескольких недель. Я не мог запустить свои сценарии SQL с использованием PSQL. Я думал, что у меня есть некоторые проблемы с моей ОС, теперь я знаю, что это проблема спецификации в моем текстовом файле. Я установил пакет bomstrip в Ubuntu, и теперь все мои сценарии SQL снова работают.

0 голосов
/ 30 марта 2010

Какую версию (-и) вы используете? ЕСЛИ EXISTS пришли с версией 8.2, возможно, вы используете соединение с версией 8.1 или старше, когда используете psql.

...