Я пытаюсь запустить следующий скрипт PHP, чтобы сделать простой запрос к базе данных:
$db_host = "localhost";
$db_name = "showfinder";
$username = "user";
$password = "password";
$dbconn = pg_connect("host=$db_host dbname=$db_name user=$username password=$password")
or die('Could not connect: ' . pg_last_error());
$query = 'SELECT * FROM sf_bands LIMIT 10';
$result = pg_query($query) or die('Query failed: ' . pg_last_error());
Это приводит к следующей ошибке:
Запрос не выполнен: ОШИБКА: отношение "sf_bands" не существует
Во всех примерах я могу найти, где кто-то получает сообщение о том, что отношения не существуют, потому что они используют заглавные буквы в названии таблицы. Имя моей таблицы не имеет заглавных букв. Есть ли способ , чтобы запросить мою таблицу , не включая имя базы данных, то есть showfinder.sf_bands
?
php
sql
postgresql
quoted-identifier
Keyslinger
источник
источник
Ответы:
Из того, что я прочитал, эта ошибка означает, что вы не ссылаетесь на имя таблицы правильно. Одной из распространенных причин является то, что таблица определена с помощью написания в смешанном регистре, и вы пытаетесь запросить ее со всеми строчными буквами.
Другими словами, следующее терпит неудачу:
Используйте двойные кавычки для разделения идентификаторов, чтобы вы могли использовать конкретное написание в смешанном регистре, как определена таблица.
Что касается вашего комментария, вы можете добавить схему в «search_path», чтобы при обращении к имени таблицы без определения ее схемы запрос совпадал с именем таблицы, проверяя каждую схему по порядку. Как
PATH
в оболочке илиinclude_path
в PHP и т. Д. Вы можете проверить текущий путь поиска схемы:Вы можете изменить путь поиска схемы:
Смотрите также http://www.postgresql.org/docs/8.3/static/ddl-schemas.html
источник
SELECT * FROM SF_Bands
это, все равно не получится, потому что Postgres решит сделать строчные имена для этой таблицы. Странно ...У меня были проблемы с этим, и это история (грустная, но правдивая):
Если имя вашей таблицы в нижнем регистре, например: учетные записи, которые вы можете использовать:
select * from AcCounTs
и оно будет работать нормальноЕсли имя вашей таблицы в нижнем регистре, например:
accounts
не удастся выполнить следующее:select * from "AcCounTs"
Если у вашей таблицы смешанный регистр, например:
Accounts
следующее не получится:select * from accounts
Если у вашей таблицы смешанный регистр, например:
Accounts
следующее будет работать нормально:select * from "Accounts"
Мне не нравится вспоминать такие бесполезные вещи, как это, но ты должен;)
источник
Accounts
, потерпит неудачу, иselect * from Accounts;
я нахожу самую странную часть: тот же случай НЕ идентичен.Запрос Postgres процесса отличается от других RDMS. Поставьте имя схемы в двойные кавычки перед именем таблицы, например, «SCHEMA_NAME». «SF_Bands»
источник
Поместите параметр dbname в строку подключения. Это работает для меня, а все остальное не удалось.
Также при выборе выберите
your_schema
.your_table
как это:источник
У меня была похожая проблема на OSX, но я пытался поиграть в двойные и одинарные кавычки. В вашем случае вы можете попробовать что-то вроде этого
источник
Это действительно полезно
Я больше разбирался в этих проблемах и узнал, как установить этот «search_path» с помощью defoult для нового пользователя в текущей базе данных.
Откройте Свойства базы данных, затем откройте Лист «Переменные» и просто добавьте эту переменную для вашего пользователя с фактическим значением.
Так что теперь ваш пользователь получит это schema_name по умолчанию, и вы можете использовать tableName без schemaName.
источник
Вы должны написать имя схемы и имя таблицы в кавычках. Как показано ниже:
источник
Для меня проблема заключалась в том, что я использовал запрос к этой конкретной таблице во время инициализации Django. Конечно, он выдаст ошибку, потому что эти таблицы не существуют. В моем случае это был
get_or_create
метод в файле admin.py, который выполнялся всякий раз, когда программное обеспечение выполняло какую-либо операцию (в данном случае миграцию). Надеюсь, что это помогает кому-то.источник
Вы должны сначала добавить схему, например
Если вы не хотите добавлять это во все запросы, попробуйте следующее:
Теперь это будет работать:
источник
Самый простой обходной путь - просто измените имя таблицы и имена всех столбцов на строчные. и ваша проблема будет решена.
Например:
Table_Name
наtable_name
иColumnName
наcolumnname
источник