es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Consultas a Postgres a través de Babelfish

Estoy conectado a través de TDS (1433) a una base de datos Postgres/Aurora habilitada para Babelfish.

Puedo ejecutar las siguientes tres consultas desde mi aplicación y recibo respuestas confusas:

SELECT current_database()
SELECT * FROM information_schema.tables WHERE table_name = 'PERSON'
SELECT COUNT(1) FROM "PERSON"

Las respuestas son:

current_database": "babelfishdb"
"table_catalog": "babelfishdb", "table_schema": "public", "table_name": "PERSON", "table_type": "BASE TABLE"...
relation "person" does not exist

Simplemente no puedo consultar la tabla PERSON. He intentado lo siguiente:

"PERSON"
"person"
PERSON
person
public.PERSON
public.person
public."PERSON"

Me he asegurado de que el usuario con el que estoy conectado tenga acceso a la base de datos, al esquema y a las tablas:

GRANT CONNECT ON DATABASE babelfish_db TO popweb;
GRANT USAGE ON SCHEMA public TO popweb;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO popweb;

Aún así, no puedo acceder a la tabla. Me siento tan torpe/inexperto.

Para cualquier persona que se haya conectado a Postgres a través de Babelfish, ¿qué estoy haciendo mal?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema puede estar relacionado con la sensibilidad de las mayúsculas y minúsculas de los identificadores en Postgres con Babelfish. Babelfish está diseñado para admitir la sintaxis de Microsoft SQL Server, que no distingue entre mayúsculas y minúsculas, mientras que Postgres sí lo hace.

    Cuando creas una tabla o columna con un nombre en mayúsculas y minúsculas en Postgres, automáticamente convierte el nombre a minúsculas a menos que esté entre comillas. Babelfish puede que no reconozca los nombres sin comillas cuando se pasan desde la aplicación.

    Para solucionar el problema, puedes intentar poner el nombre de la tabla entre comillas al realizar la consulta:

    SELECT COUNT(1) FROM ""PERSON"";

    Alternativamente, puedes crear la tabla con un nombre en minúsculas (por ejemplo, person) para evitar el problema por completo.

Comments are closed.