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()
Я пытаюсь использовать этот код, работает только в том случае, если имя базы данных совпадает с именем пользователя.
Попробуйте поставить точку с запятой между элементами строки подключения:
HostName=localhost;PortNumber=5432;LogonID=carsUser; Пароль=[ваш_пароль]; База данных = новые автомобили; sslmode = отключить;
Ссылка https://www.connectionstrings.com/progress/
Согласно документам
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
.
connectionstrings.com
выглядит довольно ориентированным на Microsoft, я не думаю, что какая-либо из основных библиотек Go PostgreSQL поддерживает разделители с запятой (pq / pgx).