#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′);
Когда вы используете смешанный регистр в названии столбца или зарезервированные слова (такие как «столбец», «строка» и т.д.), Вы должны использовать двойные кавычки вместо значений, где вы должны использовать одинарные, как вы можете видеть в примере.