Итак, я столкнулся со следующим поведением, которое меня удивило. Сначала я подумал, что ДатаВремя может быть типом данных postgres, но как насчет BidOpen? Затем есть забавная вещь с регистром имени столбца в сообщении об ошибке. Я почти чувствую, что это связано с тем, что имена без кавычек нечувствительны к регистру. Почему мне нужно заключать имя столбца в кавычки, чтобы запрос работал?
mydatabase=# select max("DateTime") from fx.candle;
max
---------------------
2019-04-26 20:59:00
(1 row)
mydatabase=# select max(DateTime) from fx.candle;
ERROR: column "datetime" does not exist
LINE 1: select max(DateTime) from fx.candle;
^
HINT: Perhaps you meant to reference the column "candle.DateTime".
mydatabase=# select max(BidOpen) from fx.candle;
ERROR: column "bidopen" does not exist
LINE 1: select max(BidOpen) from fx.candle;
^
HINT: Perhaps you meant to reference the column "candle.BidOpen".
mydatabase=# select max("BidOpen") from fx.candle;
max
---------
125.816
(1 row)
Схема выглядит так:
mydatabase=# \d fx.candle;
Table "fx.candle"
Column | Type | Modifiers
-----------+-----------------------------+-----------------------------------------------------------------
id | integer | not null default nextval('fx.candle_id_seq'::regclass)
DateTime | timestamp without time zone |
BidOpen | double precision | not null
BidHigh | double precision | not null
BidLow | double precision | not null
BidClose | double precision | not null
AskOpen | double precision | not null
AskHigh | double precision | not null
AskLow | double precision | not null
AskClose | double precision | not null
symbol_id | integer |
Indexes:
"candle_pkey" PRIMARY KEY, btree (id)
Foreign-key constraints:
"candle_symbol_id_fkey" FOREIGN KEY (symbol_id) REFERENCES fx.symbol(id)
Я думаю, что это связано с тем, что postgres нечувствителен к регистру, когда не цитирует имя, тогда как имя столбца в случае.
Аналогично: stackoverflow.com/questions/21796446/postgres-чувствительно к региструty
Насколько я понимаю, Postgres чувствителен к регистру нет в отношении имен столбцов и таблиц пока не, вы фактически создаете их, используя двойные кавычки в начале. Если это так, то вам нужно будет постоянно ссылаться на них, используя двойные кавычки, чтобы убедиться, что используется правильный литерал регистра.
Таким образом, чтобы избежать вашей текущей ситуации, вам также следует избегать создания имен столбцов/таблиц с учетом регистра.
Ваша таблица создания должна выглядеть примерно так:
create table fx.candle (
id integer not null default nextval('fx.candle_id_seq'::regclass),
...
datetime timestamp without time zone -- NO quotes here; important!
...
)
Ага, просто щелкнуло в голове, что это должно быть так
Попробуйте:
select max(symbol_id) from fx.candle
. Что вы получаете ?