Запрос вставки PostgreSQL

#postgresql #timestamp

#postgresql #временная метка

Вопрос:

Я пытаюсь вставить одну строку в таблицу журнала, но она выдает сообщение об ошибке. ><

log Структура таблицы выглядит следующим образом:

 no         integer  NOT NULL nextval('log_no_seq'::regclass)    
ip         character varying(50)    
country    character varying(10)    
region     character varying(10)    
city       character varying(50)    
postalCode character varying(10)    
taken      numeric  
date       date
  

и мой запрос:

 INSERT INTO log (ip,country,region,city,postalCode,taken,date) VALUES 
("24.24.24.24","US","NY","Binghamton","11111",1,"2011-11-09")
  

=> ERROR: column "postalcode" of relation "log" does not exist

вторая попытка запроса: (без postalcode)

 INSERT INTO log (ip,country,region,city,taken,date) VALUES 
("24.24.24.24","US","NY","11111",1,"2011-11-09")
  

=> ERROR: column "24.24.24.24" does not exist

Я не знаю, что я сделал не так…

И в PostgreSQL нет типа datetime? (2011-11-09 11:00:10)

Комментарии:

1. PostgreSQL имеет тип datetime, он называет его временной меткой . Кроме того, продуктом является PostgreSQL, а не Postgre. Если бы вы собирались сократить его, это был бы Postgres (на самом деле это название было у него до получения поддержки SQL).

2. Двойные кавычки предназначены для идентификаторов кавычек (таких как имена таблиц и столбцов), одинарные кавычки предназначены для строковых литералов.

3. Что происходит, так это то, что люди изучают MySQL, где временная метка изначально была определена как автоматическое обновление с использованием последней временной метки, если это был первый столбец временной метки. Поняв, что они использовали ключевое слово SQL reserved и тип для чего-то другого, чем то, для чего оно было предназначено, MySQL, придерживаясь обратной совместимости, нуждался в поле типа временной метки, которое не обновлялось автоматически, поэтому они изобрели datetime в качестве типа. Спецификация SQL определяет временную метку и timestamp с типами часовых поясов. Datetime — это создание MySQL. Хотелось бы, чтобы они, по крайней мере, изменили значения назад, когда…

Ответ №1:

Попробуйте использовать одинарные кавычки (например, ‘2011-11-09’)

Комментарии:

1. Также: не используйте mixedCase. Когда-нибудь это нанесет вам ответный удар. Также: дата — это зарезервированное слово (typename), не используйте его, даже если кажется, что оно работает.

2. Да, это разумный совет. Ошибка PostalCode, вероятно, уже связана со смешанным регистром.

Ответ №2:

PostgreSQL имеет тип «datetime»: timestamp . Прочитайте руководство здесь.

Двойные кавычки "" используются для идентификаторов, если они вам нужны как есть. Лучше вам никогда не использовать их, как советовал @wildplasser.

Строковые литералы заключены в одинарные кавычки '' .

Начните с чтения главы Лексическая структура. Это очень информативно. 🙂

Ответ №3:

Попробуйте переписать его таким образом:

ВСТАВИТЬ В журнал (ip, страна, регион, город, «Почтовый код», принято, дата) ЗНАЧЕНИЯ (‘24.24.24.24’, ‘США’, ‘Нью-Йорк’, ‘Бингемтон’,’11111′,1,’2011-11-09′);

Когда вы используете смешанный регистр в названии столбца или зарезервированные слова (такие как «столбец», «строка» и т.д.), Вы должны использовать двойные кавычки вместо значений, где вы должны использовать одинарные, как вы можете видеть в примере.