Postgres: зачем мне указывать имя столбца в max()?

Итак, я столкнулся со следующим поведением, которое меня удивило. Сначала я подумал, что ДатаВремя может быть типом данных 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)

Попробуйте: select max(symbol_id) from fx.candle . Что вы получаете ?

Oto Shavadze 29.05.2019 14:57

Я думаю, что это связано с тем, что postgres нечувствителен к регистру, когда не цитирует имя, тогда как имя столбца в случае.

s5s 29.05.2019 14:58
postgresql.org/docs/current/…
a_horse_with_no_name 29.05.2019 15:03
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
4
254
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Насколько я понимаю, 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!
    ...
)

Ага, просто щелкнуло в голове, что это должно быть так

s5s 29.05.2019 14:58

Другие вопросы по теме