Postgresql: смешение таблиц/схем
Я создал таблицу Abc
в общедоступной схеме моей базы данных postgresql. Согласно документации public
должна быть стандартная схема. search_path
устанавливается как "$user",public
, как ожидалось. Но следующее не удается:
select * from Abc
и этот вызов также терпит неудачу:
select * from public.Abc
Оба создают ошибку, говорящую, что relation ... does not exist
. Но это хорошо работает:
select * from public."Abc"
Я опытный разработчик T-SQL, но новичок в postgresql. Согласно документированию, должно быть возможно использовать "нормальный" SQL с postgresql. Но в моем случае это не работает. Любой намек на то, что я, возможно, испортил!?
Ответы
Ответ 1
Postgresql по умолчанию использует символы нижнего регистра, будучи чувствительными к регистру с именами столбцов/таблиц:
select * from public.Abc
на самом деле:
select * from public.abc
Это потому, что ваша таблица называется Abc, поэтому ее невозможно найти.
Вы можете переопределить это поведение нижнего регистра с помощью кавычек, поэтому "Abc" обрабатывается как Abc.
Ответ 2
Это нормально, имена объектов, такие как таблицы и столбцы, нечувствительны к регистру, если вы не ставите их между двойными кавычками ". Это стандартное поведение SQL.
Ответ 3
Не доверяйте смешанному делу. Лучше всего для вашего здравомыслия никогда не использовать смешанный случай.
Открытая схема (по большей части) является схемой по умолчанию и может быть опущена.