PostgreSQL пытается подключиться к неправильной базе данных

Postgresql пытается подключиться к базе данных с тем же именем, что и у пользователя, даже когда я указываю имя базы данных в строке подключения.

Порядок подключения:

host=localhost port=5432 
user=carsUser 
password= dbname=the-new-cars 
sslmode=disable 2024/06/22 16:00

Error al hacer ping a la base de datos: pq: database "carsUser" does not exist

Он пытается подключиться к базе данных carsUser, но это имя пользователя. Я знаю, что PostgreSQL по умолчанию может попытаться подключиться к БД с тем же именем, но... как я могу жестко/принудительно указать имя БД?

func main() {
    // Cargar variables de entorno desde el archivo .env
    err := godotenv.Load()
    if err != nil {
        log.Fatal("Error al cargar el archivo .env: ", err)
    }
    fmt.Println("Archivo .env cargado correctamente")

    // Configurar la cadena de conexión
    connStr := fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=require",
        os.Getenv("DB_HOST"),
        os.Getenv("DB_PORT"),
        os.Getenv("DB_USER"),
        os.Getenv("DB_PASSWORD"),
        os.Getenv("DB_NAME"))
    fmt.Println("Cadena de conexión:", connStr)

    // Conectar a la base de datos
    db, err := sql.Open("postgres", connStr)
    if err != nil {
        log.Fatal("Error al abrir la conexión a la base de datos: ", err)
    }
    defer db.Close()

Я пытаюсь использовать этот код, работает только в том случае, если имя базы данных совпадает с именем пользователя.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
1
0
77
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуйте поставить точку с запятой между элементами строки подключения:

HostName=localhost;PortNumber=5432;LogonID=carsUser; Пароль=[ваш_пароль]; База данных = новые автомобили; sslmode = отключить;

Ссылка https://www.connectionstrings.com/progress/

connectionstrings.com выглядит довольно ориентированным на Microsoft, я не думаю, что какая-либо из основных библиотек Go PostgreSQL поддерживает разделители с запятой (pq / pgx).
Brits 23.06.2024 03:40
Ответ принят как подходящий

Согласно документам

dbname По умолчанию совпадает с именем пользователя.

Вы, наверное, считаете, что здесь это не применимо, потому что вы указываете dbname, но есть вопрос:

password= dbname=the-new-c

lib/pq/jackc/pgxпроанализирует это как «установить пароль name=the-new-c». Чтобы это исправить, следуйте документации:

Чтобы написать пустое значение или значение, содержащее пробелы, заключите его в одинарные кавычки, например ключевое слово = 'значение'.

то есть host=localhost port=5432 user=carsUser password='' dbname=the-new-cars sslmode=disable.

Другие вопросы по теме