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.

Conectando a Aurora Postgres (Babelfish, 1433)

Estoy intentando conectarme a una nueva instancia de Aurora PostgreSQL con Babelfish habilitado.

NOTA: puedo conectarme a la instancia usando la biblioteca pg a través del puerto normal 5432 (el punto final Postgres TDAS).

Sin embargo, para esta prueba, estoy intentando conectarme a través del punto final Babelfish TDS (1433) usando el paquete estándar mssql.

Si especifico un nombre de base de datos (que es correcto), recibo el error ‘la base de datos “postgres” no existe’:

var config = {
server: ‘xxx.us-east-1.rds.amazonaws.com’,
database: ‘postgres’,
user: ‘xxx’,
password: ‘xxx’
};

y la conexión se cierra ya que falla la conexión.

Si omito la propiedad de base de datos en la configuración, como:

var config = {
server: ‘xxx.us-east-1.rds.amazonaws.com’,
user: ‘xxx’,
password: ‘xxx’
};

Se conectará. Además, puedo usar esa conexión para consultar cosas básicas como SELECT CURRENT_TIMESTAMP y ¡funciona!

Sin embargo, no puedo acceder a ninguna tabla.

Si ejecuto:

SELECT COUNT(1) FROM PERSON

Recibo el error ‘la relación “person” no existe’.

Si lo noto con un punto:

SELECT COUNT(1) FROM postgres.dbo.”PERSON”

Recibo un error “no se admite la consulta de varias bases de datos”.

Por lo tanto, no puedo conectarme a la base de datos específica directamente y si me conecto sin especificar una base de datos, no puedo hacer consultas cruzadas a la tabla.

¿Alguien ha hecho esto ya?

O, si no, ¿alguna idea para ayudarme a descubrir qué intentar a continuación? Estoy sin ideas.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución para conectarse a una nueva instancia de Aurora PostgreSQL con Babelfish habilitado utilizando el paquete mssql

    Al conectarse a una nueva instancia de Aurora PostgreSQL con Babelfish habilitado utilizando el paquete mssql, hay algunas cosas que tener en cuenta.

    En primer lugar, si especifica el nombre de la base de datos en la configuración, puede recibir un error “la base de datos “postgres” no existe”. Para evitar este error, debe omitir la propiedad de base de datos en la configuración.

    En segundo lugar, si se conecta sin especificar una base de datos en la configuración, es posible que no pueda acceder a ninguna tabla mediante una simple declaración SELECT. Puede recibir un error “la relación [nombre de la tabla] no existe”. Para superar esto, debe poner el nombre de la tabla con su nombre de esquema y el nombre de la base de datos utilizando la notación con puntos como esta:

    SELECT COUNT(1) FROM [nombre de la base de datos].[nombre del esquema].[nombre de la tabla];

    Sin embargo, si intenta utilizar la notación por puntos en la declaración SELECT, puede recibir un error “la consulta entre bases de datos no es compatible”. Desafortunadamente, no puede utilizar una simple declaración SELECT para hacer consultas entre bases de datos.

    Por lo tanto, la solución al problema es utilizar conexiones separadas para diferentes bases de datos. Necesita crear una conexión para cada base de datos a la que desee acceder. Una vez que tenga las conexiones, puede utilizar el paquete mssql para ejecutar consultas en cada conexión por separado.

    Aquí hay un ejemplo de fragmento de código que muestra cómo crear múltiples conexiones:

    const config1 = {
      server: 'xxx.us-east-1.rds.amazonaws.com',
      user: 'xxx',
      password: 'xxx',
      database: 'database1'
    };
    
    const config2 = {
      server: 'xxx.us-east-1.rds.amazonaws.com',
      user: 'xxx',
      password: 'xxx',
      database: 'database2'
    };
    
    const pool1 = new sql.ConnectionPool(config1);
    const pool2 = new sql.ConnectionPool(config2);
    

    En el código anterior, hemos creado dos conexiones utilizando configuraciones separadas. Puede crear tantas conexiones como quieras.

    Una vez que tenga las conexiones, puede utilizar el método de query del objeto ConnectionPool para ejecutar consultas en cada conexión por separado:

    pool1.query('SELECT COUNT(1) FROM [nombre del esquema].[nombre de la tabla]').then(result => {
      console.log(result);
    });
    
    pool2.query('SELECT COUNT(1) FROM [nombre del esquema].[nombre de la tabla]').then(result => {
      console.log(result);
    });
    

    En el código anterior, hemos utilizado el método de query para ejecutar una consulta SELECT en cada conexión. Puede reemplazar el texto de la consulta con sus propias consultas.

    Tenga en cuenta que debe reemplazar [nombre de la base de datos], [nombre del esquema] y [nombre de la tabla] con sus valores reales en el SELECT notado por puntos.

    Esta solución debería ayudarle a conectarse a una nueva instancia de Aurora PostgreSQL con Babelfish habilitado utilizando el paquete mssql.

Comments are closed.