ОШИБКА: база данных «dbname» не существует

19

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

DROP DATABASE dbname;

Или я могу уронить его, используя инструмент-обертку dropdb.

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

                                          List of databases
           Name            |   Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
---------------------------+-----------+----------+-------------+-------------+-----------------------
 Blog_development          | myusername | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 Blog_test                 | myusername | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 

Имя базы данных - Blog_development (и та, что ниже). Я играл с рельсами и пытался учиться на онлайн-документации. Я хотел начать все заново и удалить все.

Однако при попытке удалить его, он говорит, что его не существует. Я новичок в PostgreSQL, поэтому я немного растерян, в документации об этой ошибке нет ничего, кроме того, что она появляется, когда ее не существует. Конечно, это существует, это прямо там.

Sephethus
источник
2
Пожалуйста, всегда показывайте полный, точный текст любых сообщений об ошибках и показывайте свою версию PostgreSQL.
Крейг Рингер
Проверьте порт, на котором работает ваша БД. Такие инструменты, как dropdb, createb и т. Д. Будут подключаться по умолчанию к 5432. Это обнаружило меня, когда моя БД фактически работала на 5433.

Ответы:

26

Ваша база данных была создана с использованием двойных кавычек, поэтому ее имя теперь чувствительно к регистру. Следовательно, теперь вам нужно всегда использовать двойные кавычки при ссылке на него:

drop database "Blog_test";

Подробнее о цитируемых идентификаторах (имя базы данных является идентификатором, аналогичным имени столбца или таблицы) можно найти в руководстве:
http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html. # SQL-синтаксических ИДЕНТИФИКАТОРЫ

a_horse_with_no_name
источник
1
мое эмпирическое правило всегда использую нижний регистр :( У меня была такая же проблема.
Крис Хо