Подтвердить что ты не робот

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. Но в моем случае это не работает. Любой намек на то, что я, возможно, испортил!?

4b9b3361

Ответ 1

Postgresql по умолчанию использует символы нижнего регистра, будучи чувствительными к регистру с именами столбцов/таблиц:

select * from public.Abc 

на самом деле:

select * from public.abc

Это потому, что ваша таблица называется Abc, поэтому ее невозможно найти.

Вы можете переопределить это поведение нижнего регистра с помощью кавычек, поэтому "Abc" обрабатывается как Abc.

Ответ 2

Это нормально, имена объектов, такие как таблицы и столбцы, нечувствительны к регистру, если вы не ставите их между двойными кавычками ". Это стандартное поведение SQL.

Ответ 3

Не доверяйте смешанному делу. Лучше всего для вашего здравомыслия никогда не использовать смешанный случай. Открытая схема (по большей части) является схемой по умолчанию и может быть опущена.