Estoy tratando de ejecutar el siguiente script PHP para hacer una consulta simple a la base de datos:
$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());
Esto produce el siguiente error:
Consulta fallida: ERROR: la relación "sf_bands" no existe
En todos los ejemplos que puedo encontrar donde alguien obtiene un error que indica que la relación no existe, es porque usan letras mayúsculas en el nombre de su tabla. El nombre de mi tabla no tiene letras mayúsculas. ¿Hay alguna manera de consultar mi tabla sin incluir el nombre de la base de datos, es decir showfinder.sf_bands
?
php
sql
postgresql
quoted-identifier
Keyslinger
fuente
fuente
Respuestas:
Por lo que he leído, este error significa que no estás haciendo referencia al nombre de la tabla correctamente. Una razón común es que la tabla se define con una ortografía de mayúsculas y minúsculas, y está intentando consultarla en minúsculas.
En otras palabras, lo siguiente falla:
Use comillas dobles para delimitar identificadores para que pueda usar la ortografía de mayúsculas y minúsculas específica a medida que se define la tabla.
En su comentario, puede agregar un esquema a "search_path" para que cuando haga referencia a un nombre de tabla sin calificar su esquema, la consulta coincida con ese nombre de tabla marcando cada esquema en orden. Al igual que
PATH
en el shell oinclude_path
en PHP, etc. Puede verificar su ruta de búsqueda de esquema actual:Puede cambiar su ruta de búsqueda de esquema:
Ver también http://www.postgresql.org/docs/8.3/static/ddl-schemas.html
fuente
SELECT * FROM SF_Bands
esto todavía fallará, porque Postgres decide poner en minúscula ese nombre de tabla para usted. Extraño ...Tuve problemas con esto y esta es la historia (triste pero verdadera):
Si el nombre de su tabla está en minúsculas como: cuentas que puede usar:
select * from AcCounTs
y funcionará bienSi el nombre de su tabla es todo en minúsculas como:
accounts
Lo siguiente fallará:select * from "AcCounTs"
Si el nombre de su tabla es un caso mixto como:
Accounts
Lo siguiente fallará:select * from accounts
Si el nombre de su tabla es una combinación de mayúsculas y minúsculas como:
Accounts
Lo siguiente funcionará bien:select * from "Accounts"
No me gusta recordar cosas inútiles como esta, pero tienes que hacerlo;)
fuente
Accounts
fallaráselect * from Accounts;
. Encuentro la parte más extraña: el mismo caso NO es idéntico.Postgres consulta de proceso diferente de otros RDMS. Ponga el nombre del esquema entre comillas dobles antes del nombre de su tabla como este, "SCHEMA_NAME". "SF_Bands"
fuente
Ponga el parámetro dbname en su cadena de conexión. Funciona para mí mientras que todo lo demás falló.
También al hacer la selección, especifique el
your_schema
.your_table
Me gusta esto:fuente
Tuve un problema similar en OSX pero intenté jugar con comillas dobles y simples. Para su caso, podría intentar algo como esto
fuente
Esto es realmente útil
Investigué más sobre estos problemas y descubrí cómo configurar este "search_path" al buscar un nuevo usuario en la base de datos actual.
Abra las Propiedades de DataBase, luego abra la Hoja "Variables" y simplemente agregue esta variable para su usuario con valor real.
Entonces, su usuario obtendrá este nombre_esquema por desconfiguración y podría usar tableName sin schemaName.
fuente
Debe escribir el nombre del esquema y el nombre de la tabla en la marca de qutotation. Como a continuación:
fuente
Para mí, el problema era que había usado una consulta a esa tabla en particular mientras se inicializaba Django. Por supuesto, arrojará un error, porque esas tablas no existían. En mi caso, era un
get_or_create
método dentro de un archivo admin.py, que se ejecutaba cada vez que el software ejecutaba cualquier tipo de operación (en este caso, la migración). Espero que ayude a alguien.fuente
Primero debe agregar el esquema, p. Ej.
Si no desea agregar eso en todas las consultas, intente esto:
Ahora funcionará:
fuente
La solución más fácil es simplemente cambiar el nombre de la tabla y todos los nombres de columna a minúsculas y su problema se resolverá.
Por ejemplo:
Table_Name
atable_name
yColumnName
acolumnname
fuente