#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. Спасибо вам за это! Я только что задал тот же вопрос, а затем нашел это 🙂