Postgres Golang

Postgres Golang



Selalunya dirujuk sebagai Golang, Go ialah bahasa pengaturcaraan yang sumber terbuka, disusun dan ditaip secara statik yang dicipta oleh Google. Ia dibina supaya mudah difahami, pantas, jelas dan berprestasi tinggi.

PostgreSQL, selalunya dirujuk sebagai Postgres, ialah sistem pangkalan data hubungan objek sumber terbuka yang berkuasa. Dengan lebih daripada 30 tahun pembangunan aktif, ia telah memperoleh reputasi yang kukuh untuk keteguhan, ciri-ciri canggih dan pematuhan piawaian yang besar.

Ia direka untuk mengendalikan beban kerja yang banyak, daripada mesin tunggal kepada gudang data atau perkhidmatan web dengan ramai pengguna serentak. Ia menyediakan integriti dan ketahanan transaksi serta menyokong pelbagai jenis data lanjutan dan bahasa manipulasi data yang berkuasa dan fleksibel.







Tutorial ini mengajar kita cara mengkonfigurasi dan menyambungkan pelayan PostgreSQL dengan aplikasi Go.



Keperluan:

Pergi Bahasa Pengaturcaraan – Ia memastikan bahawa pengkompil Go dipasang pada mesin anda.



Pangkalan Data PostgreSQL – Anda juga perlu memasang PostgreSQL. Anda boleh memasangnya terus pada mesin anda atau menggunakan bekas Docker untuk persediaan yang lebih mudah.





Alat Pembangunan – Persekitaran Pembangunan Bersepadu (IDE) yang menyokong Go seperti Visual Studio Code, GoLand, dsb.

Pengetahuan Asas SQL dan Go – Untuk berinteraksi dengan pangkalan data PostgreSQL, anda mesti memahami SQL dan pelbagai pertanyaan yang perlu anda laksanakan. Anda juga memerlukan pemahaman asas tentang bahasa Go.



Dengan syarat yang diberikan dipenuhi, kita boleh meneruskan ke langkah berikut.

Persediaan Projek

Mari kita mulakan dengan menyediakan struktur direktori projek kami. Cipta direktori utama di mana anda perlu menyimpan kod sumber projek.

$ mkdir golang_postgres

Navigasi ke dalam direktori dan mulakan modul Go baharu.

$ cd golang_postgres && pergi mod init utama

Pasang Pemacu yang Diperlukan

Untuk berinteraksi dengan pangkalan data PostgreSQL, kami memerlukan pemacu PostgreSQL untuk bahasa pengaturcaraan Go.

Untuk tutorial ini, kami menggunakan pemacu pq yang menawarkan pelbagai ciri untuk berfungsi dengan pangkalan data PostgreSQL.

Anda boleh memasangnya dengan menjalankan arahan berikut:

pergi dapatkan github.com / lib / pq

Buat Pangkalan Data

Langkah seterusnya ialah mencipta pangkalan data PostgreSQL baharu. Sekali lagi, kita boleh melakukan ini dalam shell PostgreSQL.

$ psql -DALAM postgres

Perintah ini meminta anda untuk kata laluan postgres. Setelah dilog, jalankan arahan 'buat pangkalan data' untuk memulakan pangkalan data baharu:

postgres=# buat pangkalan data golang;
BUAT PANGKALAN DATA

Perintah yang diberikan mencipta pangkalan data baharu yang dipanggil 'golang'. Jangan ragu untuk menggantikan nama pangkalan data dengan nama yang anda inginkan.

Anda kemudian boleh mengesahkan bahawa pangkalan data berjaya dibuat dengan menyambung kepadanya.

postgres=# \c golang;
Anda kini disambungkan ke pangkalan data 'golang' sebagai pengguna 'postgres'.

Seterusnya, sediakan jadual di mana anda ingin menyimpan data. Kami mencipta jadual ringkas untuk tutorial ini yang menyimpan maklumat sesi.

BUAT JADUAL db_clients (
id KUNCI UTAMA SIRI,
nama VARCHAR(100) BUKAN NULL,
session_time TIMESTAMP NOT NULL,
bilangan_pertanyaan INT lalai 0,
active_state BOOLEAN DEFAULT FALSE
);

Pertanyaan yang diberikan harus mencipta jadual baharu yang dipanggil 'db_clients' yang menyimpan maklumat tentang klien yang dilog masuk ke pelayan pangkalan data yang diberikan.

Sambungkan Apl Go dengan PostgreSQL

Setelah kami menyediakan pangkalan data dan jadual pangkalan data, kami boleh meneruskan dan mempelajari cara menyambungkan aplikasi Go kami dengan pelayan PostgreSQL.

Mulakan dengan mencipta fail 'main.go' dalam akar projek anda:

$ sentuh main.go

Seterusnya, edit fail dengan editor teks pilihan anda:

$ kerana main.go

Dalam fail 'main.go', tambah kod sumber seperti yang ditunjukkan dalam yang berikut:

pakej utama

import (
'pangkalan data/sql'
'fmt'
'log'

_ 'github.com/lib/pq'
)

fungsi utama ( ) {
connStr := 'postgres://postgres:password@localhost/golang?sslmode=disable'
db, err := sql.Open ( 'postgres' , sambungStr )
jika silap ! = tiada {
log.Maut ( silap )
}

jika err = db.Ping ( ) ; silap ! = tiada {
log.Maut ( silap )
}

fmt.Println ( 'Disambungkan ke pangkalan data' )
}

Dalam kod sebelumnya, kita mulakan dengan mengimport modul yang diperlukan. Kami kemudian menentukan fungsi utama. Akhir sekali, dalam fungsi utama, kami mentakrifkan rentetan sambungan yang membolehkan kami menentukan hos sasaran, pengguna pangkalan data, kata laluan pangkalan data, dan pangkalan data sasaran sebenar.

Modul ini menyokong parameter berikut dalam rentetan sambungan:

  • dbname – Nama pangkalan data untuk disambungkan.
  • pengguna – Pengguna untuk mendaftar masuk sebagai.
  • kata laluan – Kata laluan pengguna.
  • hos – Hos untuk disambungkan. Nilai yang bermula dengan “/” adalah untuk soket domain Unix (lalai ialah localhost).
  • port – Port untuk diikat (lalai ialah 5432).
  • sslmode – Sama ada hendak menggunakan SSL atau tidak (lalai diperlukan; ini bukan lalai untuk libpq).
  • fallback_application_name - Nama_aplikasi untuk digunakan semula jika tidak diberikan.
  • connect_timeout – Penantian maksimum untuk sambungan dalam beberapa saat. Sifar atau tidak dinyatakan bermaksud menunggu selama-lamanya.
  • sslcert - Lokasi fail sijil. Fail mesti mengandungi data berkod PEM.
  • sslkey - Lokasi fail utama. Fail mesti mengandungi data berkod PEM.
  • sslrootcert - Lokasi fail sijil akar. Fail mesti mengandungi data berkod PEM.

Anda boleh mengkonfigurasi sifat sambungan sasaran anda seperti yang diperlukan. Untuk mengkonfigurasi SSL dan parameter SSLMode yang diterima, semak tutorial kami tentang https://linuxhint.com/postgres-sslmode .

Setelah berpuas hati dengan sifat sambungan, anda boleh menjalankan kod sebelumnya untuk menguji sama ada sambungan diwujudkan.

pergi lari .\main.go

Selepas sambungan, anda sepatutnya mendapat output berikut:

Disambungkan ke pangkalan data

PostgreSQL Masukkan Data Ke dalam Jadual

Langkah seterusnya ialah memasukkan data sampel ke dalam jadual yang kami buat tadi. Kita boleh melakukan ini dengan mentakrifkan pertanyaan sisipan sebagai rentetan literal dan kemudian menggunakan fungsi db.Exec() untuk menjalankan pertanyaan sasaran.

Kodnya adalah seperti berikut:

---
insertStatement := `INSERT INTO db_clients (nama, session_time, number_of_queries, active_state)
NILAI
('psql', '2023-05-26 10:15:00', 10, benar),
('datagrip', '2023-05-26 09:30:00', 5, benar),
('dbeaver', '2023-05-26 11:00:00', 20, benar),
('meja kerja', '2023-05-26 14:45:00', 15, palsu),
('jarak', '2023-05-26 13:20:00', 8, benar);`

_, err = db.Exec(insertStatement)
if err != nil {
log.Fatal(err)
}

Jika anda menjalankan kod sebelumnya, ia harus memasukkan rekod yang ditentukan ke dalam jadual sasaran.

Data Pertanyaan PostgreSQL

Untuk menanyakan baris daripada jadual, kita boleh mentakrifkan pernyataan pilih sebagai rentetan dan menggunakan db.Query() untuk menjalankannya. Kita boleh mengulangi baris jadual menggunakan fungsi Next() dan mencetaknya seperti yang ditunjukkan dalam yang berikut:

baris, err := db.Query ( 'PILIH * DARI db_clients' )
jika silap ! = tiada {
log.Maut ( silap )
}
menangguhkan baris.Tutup ( )

untuk baris.Seterusnya ( ) {
adalah ID int
rentetan nama var
var sessionMasa masa.Masa
var numberOfQueries int
var activeState bool

err := rows.Scan ( & ID , & nama, & masa sesi, & numberOfQueries, & activeState )
jika silap ! = tiada {
log.Maut ( silap )
}

fmt.Cetakf ( 'ID: %d, Nama: %s, Masa Sesi: %s, Bilangan Pertanyaan: %d, Keadaan Aktif: %t \n ' , ID , nama, sessionTime, numberOfQueries, activeState )
}

jika err = baris.Err ( ) ; silap ! = tiada {
log.Maut ( silap )
}

Sebaik sahaja kami menjalankan kod sebelumnya, ia harus mencetak semua baris dari jadual db_clients seperti yang ditunjukkan dalam contoh output berikut:

Itulah anda mempunyainya!

Kesimpulan

Kami meneroka cara kami boleh menggunakan pakej pq untuk menyambung dan menanyakan pangkalan data PostgreSQL menggunakan Golang.