error connecting to database: pq: database "wahid" does not exist in golang

·Abdul Wahid Kahar

Sebenarnya ini cuman masalah connect ke database, nulis codenya juga ya mirip-miriplah sama bahasa lain ngga jauh beda konsepnya, ada config terus kalau mau gampang buatin .env nya, jadi nanti tinggal manggil variabel .env nya.

Tapi pada saat saya coba test koneksi ke databasenya saya dapat error:

failed to connect database:failed to connect to user=wahid database=: 127.0.0.1:5432 (127.0.0.1): server error: FATAL: database "wahid" does not exist (SQLSTATE 3D000) exit status 1

Oke kata saya, coba debug print di log usernya ada, databasenya ada, host, port semuanya lengkap. tapi yang bikin bingung tuh kata erronya dia tidak menemukan database “wahid”, lah kenapa databasenya pake “wahid” sedangakan itu bukan nama database yang saya tulis di .env kan, dan hasil log juga tadi membuktikan bahwa .env nya sudah benar-benar berhasil mengambil valuenya karena tampil di log. garuk kepala lah saya kan.

Saya mikir, apa yang salah yak. saya coba debug lagi deh kasih log semua method-methodnya barangkali ada yang belum kepanggil atau ada error lain kan. setelah coba semuanya aman-aman aja sih kepanggil semua.

Okelah kata saya kan, coba chatGpt. saya coba jelaskan bahwa saya sudah buat .env nya buat method-methodnya dan semuanya berjalan dan value dari .env juga sudah berhasil di load dan sudah tampil di log.

dijawablah sama gpt kan, “Masalah sebenarnya itu ada di cara DSN di-parse oleh pgx v5 stdlib.

Sebelumnya kamu pakai keyword DSN:

go
dsn := fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=%s", ...)

Kenapa itu gagal:

  1. pgx stdlib kadang mengabaikan dbname jika ada environment PostgreSQL (PGDATABASE, PGUSER, dll) yang aktif.

  2. Driver juga bisa salah fallback ke default database yang sama dengan nama user.

  3. Akibatnya muncul error:

database "wahid" does not exist

Padahal kamu sudah menulis dbname=booking_reservation di DSN — tapi driver tidak membacanya dengan benar.

Solusi yang berhasil:

go
dsn := fmt.Sprintf(
    "postgres://%s:%s@%s:%s/%s?sslmode=%s",
    user, password, host, port, dbname, ssl,
)

💡 Intinya:

  • Masalah bukan database, bukan Go, bukan config, bukan env .env.

  • Masalah adalah format DSN sebelumnya yang ambigu bagi pgx stdlib.

  • Mengganti ke URL DSN menyelesaikan semua ambiguity → sekarang connect berhasil ✅

😑 Absolut Cinema….

Salah format doang kan. tapi ya gimana ya gini-gini juga ngga boleh dianggap remeh, jadi pelajaran baru lagi nih buat saya pribadi.

Terima kasih sudah membaca, terima kasih juga ChatGpt 🙏