Почему я не вижу имен столбцов таблицы?

#postgresql

#postgresql

Вопрос:

Итак, я создал несколько таблиц программно и хочу убедиться, что их структура соответствует тому, что я думаю.

 >Rocko=# c Rocko
Password for user Rocko:
psql (8.4.4, server 8.4.8)
You are now connected to database "Rocko".
Rocko=# d
            List of relations
 Schema |     Name     |   Type   | Owner
-------- -------------- ---------- -------
 public | Email        | table    | Rocko
 public | Email_id_seq | sequence | Rocko
 public | Test         | table    | Rocko
 public | Test_id_seq  | sequence | Rocko
 public | User         | table    | Rocko
 public | User_id_seq  | sequence | Rocko
(6 rows)
 

Итак, например, я хочу видеть столбцы в Test.

Rocko=# d Test

Did not find any relation named "Test".

Подождите минутку ?! Разве тест не отображался просто в разделе «Список отношений»? Что здесь происходит?

Комментарии:

1. что дает текст описания таблицы?

Ответ №1:

PostgreSQL по умолчанию преобразует идентификаторы без кавычек (например, имена таблиц и столбцов) в нижний регистр; стандарт гласит, что идентификаторы должны быть нормализованы в верхний регистр, но здесь это не важно. Итак, когда вы говорите это:

 d Test
 

PostgreSQL считает это так же, как d test . Вероятно, у вас есть таблица, созданная с именем, заключенным в кавычки:

 create table "Test" ( ...
 

так что его имя чувствительно к регистру и должно заключаться в кавычки (с двойными кавычками) каждый раз, когда на него ссылаются. Поэтому попробуйте заключить имя в кавычки:

 d "Test"
 

Комментарии:

1. Или еще лучше, никогда не используйте двойные кавычки для идентификаторов вообще . Тогда вы можете смешивать регистр в своих идентификаторах по своему усмотрению, все будет свернуто в нижний регистр, и вам никогда не придется заключать идентификаторы в двойные кавычки или сталкиваться с ошибкой, подобной этой. Конечно, вам придется переименовывать существующие объекты, которые были созданы таким громоздким способом. И, конечно, вы должны держаться подальше от зарезервированных слов — что вы должны в любом случае.

2. @Erwin: Вы не получите от меня никаких аргументов по этому поводу. Но может быть трудно спорить с существующими базами данных, корпоративными политиками и другими подобными неудачными частями реальности. С другой стороны, это не типичное безумие MySQL.

3. Благодарю господа за небольшие милости. 😉

4. Спасибо вам за это! Я только что задал тот же вопрос, а затем нашел это 🙂