При создании таблицы в PostgreSQL таблица создается, но столбцы не [дубликаты]

Когда я запускаю следующий оператор, таблица создается, но столбцов нет:

CREATE TABLE "mod_1237" ("Collecteddepth" float8 NOT NULL, "Collectedtime"
float8 NOT NULL, "CollectedData" Varchar(45) NOT NULL, "Collectedpass"
float8 NOT NULL, "Collectedmodtime" float8 NOT NULL) WITH (OIDS = FALSE);

Я знаю, что не создаю первичный ключ, но это не должно препятствовать созданию столбцов. Когда я запускаю этот код, он также не генерирует никаких ошибок, поэтому все выглядит нормально, пока я не попытаюсь записать в таблицу. Любые идеи относительно того, почему это не сработает или как создать таблицу с заданными столбцами?

Я использую PostgreSQL версии 9.1.4 на Windows Server Standard SP2.


person user1821563    schedule 13.11.2012    source источник
comment
-1 Перекрестная публикация в списке рассылки PostgreSQL здесь archives.postgresql .org/message-id/ не отображал фактический оператор INSERT или сообщение об ошибке.   -  person Craig Ringer    schedule 14.11.2012


Ответы (2)


На это ответил Хьюберт ("Depesz") из списка рассылки PostgreSQL, где вопрос был опубликован. Для справки всем, кто читает это здесь, вот ответ. Поскольку он еще не был добавлен в архивы, эта ссылка некоторое время будет 404, поэтому я воспроизведу ответ Герберта ниже:


скорее всего, вы вставили как:

insert into mod_1237 (Collecteddepth) values (...)

то есть вы не указали имена столбцов. Отсюда и проблема.

В psql вы можете сделать:

\d mod_1237

и вы увидите столбцы там.

С наилучшими пожеланиями,

депеш

Другими словами: если вы заключаете имена в двойные кавычки в определениях таблиц, заключайте их также в двойные кавычки везде, где вы на них ссылаетесь.

Это часто задаваемые вопросы; видеть:

и более.

person Craig Ringer    schedule 14.11.2012

Просто избавьтесь от кавычек, так как они не нужны.

CREATE TABLE mod_1237 (Collecteddepth float8 NOT NULL, Collectedtime float8 NOT NULL, CollectedDate Varchar(45) NOT NULL, Collectedpass float8 NOT NULL, Collectedmodtime float8 NOT NULL) WITH (OIDS = FALSE);
person A. Gilfrin    schedule 13.11.2012
comment
Кавычки необходимы, если какое-то другое программное обеспечение будет использовать "Collecteddepth" в качестве имени столбца. - person mu is too short; 13.11.2012
comment
Я не могу взять кавычки, потому что требуется регистр букв. Приведенный выше пример был просто примером, но он вызывал у меня ту же проблему, что и таблица, которую я пытался создать. Любые другие идеи? - person user1821563; 13.11.2012