Το PostgreSQL, που συχνά αναφέρεται απλώς ως Postgres, είναι ένα ισχυρό, ανοιχτού κώδικα αντικειμενο-σχεσιακό σύστημα βάσης δεδομένων. Με περισσότερα από 30 χρόνια ενεργού ανάπτυξης, έχει αποκτήσει ισχυρή φήμη για τη στιβαρότητα, τα προηγμένα χαρακτηριστικά και την ουσιαστική συμμόρφωσή του με τα πρότυπα.
Έχει σχεδιαστεί για να χειρίζεται εκτεταμένους φόρτους εργασίας, από μεμονωμένα μηχανήματα έως αποθήκες δεδομένων ή υπηρεσίες web με πολλούς ταυτόχρονους χρήστες. Παρέχει ακεραιότητα και ανθεκτικότητα συναλλαγών και υποστηρίζει διάφορους προηγμένους τύπους δεδομένων και ισχυρή, ευέλικτη γλώσσα χειρισμού δεδομένων.
Αυτό το σεμινάριο μας διδάσκει πώς να ρυθμίσουμε και να συνδέσουμε έναν διακομιστή PostgreSQL με μια εφαρμογή Go.
Απαιτήσεις:
Γλώσσα προγραμματισμού Go – Διασφαλίζει ότι ο μεταγλωττιστής Go είναι εγκατεστημένος στον υπολογιστή σας.
Βάση δεδομένων PostgreSQL – Πρέπει επίσης να έχετε εγκαταστήσει την PostgreSQL. Μπορείτε να το εγκαταστήσετε απευθείας στο μηχάνημά σας ή να χρησιμοποιήσετε ένα κοντέινερ Docker για πιο απλή εγκατάσταση.
Εργαλεία ανάπτυξης – Ένα ολοκληρωμένο περιβάλλον ανάπτυξης (IDE) που υποστηρίζει Go like Visual Studio Code, GoLand κ.λπ.
Βασική γνώση SQL and Go – Για να αλληλεπιδράσετε με τη βάση δεδομένων PostgreSQL, πρέπει να κατανοήσετε την SQL και τα διάφορα ερωτήματα που πρέπει να πραγματοποιήσετε. Χρειάζεστε επίσης μια βασική κατανόηση της γλώσσας Go.
Εφόσον πληρούνται οι δεδομένες απαιτήσεις, μπορούμε να προχωρήσουμε στα παρακάτω βήματα.
Ρύθμιση έργου
Ας ξεκινήσουμε ρυθμίζοντας τη δομή του καταλόγου του έργου μας. Δημιουργήστε τον κύριο κατάλογο όπου πρέπει να αποθηκεύσετε τον πηγαίο κώδικα του έργου.
$ mkdir golang_postgresΠλοηγηθείτε στον κατάλογο και αρχικοποιήστε μια νέα ενότητα Go.
$ CD golang_postgres && go mod init mainΕγκαταστήστε τα απαιτούμενα προγράμματα οδήγησης
Για να αλληλεπιδράσουμε με τη βάση δεδομένων PostgreSQL, χρειαζόμαστε ένα πρόγραμμα οδήγησης PostgreSQL για τη γλώσσα προγραμματισμού Go.
Για αυτό το σεμινάριο, χρησιμοποιούμε το πρόγραμμα οδήγησης pq που προσφέρει ένα ευρύ φάσμα δυνατοτήτων για εργασία με τη βάση δεδομένων PostgreSQL.
Μπορείτε να το εγκαταστήσετε εκτελώντας την ακόλουθη εντολή:
πηγαίνετε να πάρετε το github.com / lib / pqΔημιουργήστε μια βάση δεδομένων
Το επόμενο βήμα είναι να δημιουργήσετε μια νέα βάση δεδομένων PostgreSQL. Και πάλι, μπορούμε να το κάνουμε αυτό στο κέλυφος PostgreSQL.
$ psql -ΣΕ postgresΑυτή η εντολή σας ζητά τον κωδικό πρόσβασης του postgres. Μόλις συνδεθείτε, εκτελέστε την εντολή 'create database' για να αρχικοποιήσετε μια νέα βάση δεδομένων:
postgres=# δημιουργία βάσης δεδομένων golang;ΔΗΜΙΟΥΡΓΙΑ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ
Η εντολή που δίνεται δημιουργεί μια νέα βάση δεδομένων που ονομάζεται 'golang'. Μη διστάσετε να αντικαταστήσετε το όνομα της βάσης δεδομένων με το όνομα που επιθυμείτε.
Στη συνέχεια, μπορείτε να επαληθεύσετε ότι η βάση δεδομένων έχει δημιουργηθεί με επιτυχία συνδέοντας σε αυτήν.
postgres=# \c golang;Είστε πλέον συνδεδεμένοι στη βάση δεδομένων 'golang' ως χρήστης 'postgres'.
Στη συνέχεια, ορίστε τον πίνακα στον οποίο θέλετε να αποθηκεύσετε τα δεδομένα. Δημιουργούμε έναν απλό πίνακα για αυτό το σεμινάριο που αποθηκεύει τις πληροφορίες συνεδρίας.
CREATE TABLE db_clients (Αναγνωριστικό ΣΕΙΡΙΚΟ ΚΥΡΙΟ ΚΛΕΙΔΙ,
όνομα VARCHAR(100) NOT NULL,
session_time TIMESTAMP NOT NULL,
number_of_queries ΠΡΟΕΠΙΛΟΓΗ 0,
active_state BOOLEAN DEFAULT FALSE
)
Το συγκεκριμένο ερώτημα θα πρέπει να δημιουργήσει έναν νέο πίνακα που ονομάζεται 'db_clients' που αποθηκεύει πληροφορίες σχετικά με τους πελάτες που είναι συνδεδεμένοι σε έναν δεδομένο διακομιστή βάσης δεδομένων.
Συνδέστε την εφαρμογή Go με την PostgreSQL
Μόλις ρυθμίσουμε τη βάση δεδομένων και τον πίνακα βάσης δεδομένων, μπορούμε να προχωρήσουμε και να μάθουμε πώς να συνδέσουμε την εφαρμογή Go με τον διακομιστή PostgreSQL.
Ξεκινήστε δημιουργώντας ένα αρχείο 'main.go' στη ρίζα του έργου σας:
$ αφή main.goΣτη συνέχεια, επεξεργαστείτε το αρχείο με τον επεξεργαστή κειμένου της επιλογής σας:
$ επειδή main.goΣτο αρχείο 'main.go', προσθέστε τον πηγαίο κώδικα όπως φαίνεται παρακάτω:
κύριο πακέτοεισαγωγή (
'βάση δεδομένων/sql'
'fmt'
'κούτσουρο'
_ 'github.com/lib/pq'
)
func main ( ) {
connStr := 'postgres://postgres:password@localhost/golang?sslmode=disable'
db, err := sql.Άνοιγμα ( 'postgres' , connStr )
αν πλανώμαι ! = μηδέν {
log.Μοιραία ( πλανώμαι )
}
αν err = db.Ping ( ) ; πλανώμαι ! = μηδέν {
log.Μοιραία ( πλανώμαι )
}
fmt.Println ( 'Σύνδεση με βάση δεδομένων' )
}
Στον προηγούμενο κώδικα, ξεκινάμε εισάγοντας τις απαιτούμενες ενότητες. Στη συνέχεια ορίζουμε την κύρια συνάρτηση. Τέλος, στην κύρια συνάρτηση, ορίζουμε τη συμβολοσειρά σύνδεσης που μας επιτρέπει να καθορίσουμε τον κεντρικό υπολογιστή-στόχο, τον χρήστη της βάσης δεδομένων, τον κωδικό πρόσβασης βάσης δεδομένων και την πραγματική βάση δεδομένων προορισμού.
Η μονάδα υποστηρίζει τις ακόλουθες παραμέτρους στη συμβολοσειρά σύνδεσης:
- dbname – Το όνομα της βάσης δεδομένων στην οποία θα συνδεθείτε.
- χρήστης – Ο χρήστης για είσοδο ως.
- κωδικός πρόσβασης – Ο κωδικός πρόσβασης χρήστη.
- host – Ο κεντρικός υπολογιστής στον οποίο θα συνδεθείτε. Οι τιμές που ξεκινούν με '/' είναι για υποδοχές τομέα Unix (η προεπιλογή είναι localhost).
- θύρα – Η θύρα προς σύνδεση (η προεπιλογή είναι 5432).
- sslmode – Αν θα χρησιμοποιηθεί ή όχι SSL (η προεπιλογή είναι υποχρεωτική, αυτή δεν είναι η προεπιλογή για το libpq).
- fallback_application_name – Ένα όνομα_εφαρμογής στο οποίο επιστρέφετε εάν δεν παρέχεται.
- connect_timeout – Η μέγιστη αναμονή για σύνδεση σε δευτερόλεπτα. Μηδενικό ή μη καθορισμένο σημαίνει να περιμένετε επ' αόριστον.
- sslcert – Η θέση του αρχείου πιστοποιητικού. Το αρχείο πρέπει να περιέχει τα δεδομένα με κωδικοποίηση PEM.
- sslkey – Η θέση του αρχείου κλειδιού. Το αρχείο πρέπει να περιέχει τα δεδομένα με κωδικοποίηση PEM.
- sslrootcert – Η θέση του αρχείου πιστοποιητικού ρίζας. Το αρχείο πρέπει να περιέχει τα δεδομένα με κωδικοποίηση PEM.
Μπορείτε να διαμορφώσετε τις ιδιότητες σύνδεσης προορισμού όπως απαιτείται. Για να διαμορφώσετε το SSL και τις αποδεκτές παραμέτρους SSLMode, ελέγξτε το σεμινάριο μας https://linuxhint.com/postgres-sslmode .
Αφού είστε ικανοποιημένοι με τις ιδιότητες σύνδεσης, μπορείτε να εκτελέσετε τον προηγούμενο κώδικα για να ελέγξετε εάν η σύνδεση έχει δημιουργηθεί.
πήγαινε τρέξε .\main.goΚατά τη σύνδεση, θα πρέπει να λάβετε την ακόλουθη έξοδο:
Συνδέθηκε στη βάση δεδομένωνPostgreSQL Εισαγάγετε δεδομένα στον πίνακα
Το επόμενο βήμα είναι να εισαγάγετε τα δείγματα δεδομένων στον πίνακα που δημιουργήσαμε νωρίτερα. Μπορούμε να το κάνουμε αυτό ορίζοντας τα ερωτήματα εισαγωγής ως κυριολεκτικά συμβολοσειράς και στη συνέχεια χρησιμοποιούμε τη συνάρτηση db.Exec() για να εκτελέσουμε το ερώτημα προορισμού.
Ο κωδικός είναι ο εξής:
---insertStatement := `INSERT INTO db_clients (όνομα, session_time, number_of_queries, active_state)
ΑΞΙΕΣ
('psql', '26-05-2023 10:15:00', 10, true)
('datagrip', '26-05-2023 09:30:00', 5, true)
('dbeaver', '26-05-2023 11:00:00', 20, true)
('πάγκος εργασίας', '26-05-2023 14:45:00', 15, ψευδής)
('απομακρυσμένο', '26-05-2023 13:20:00', 8, αληθινό)'
_, err = db.Exec(insertStatement)
αν λάθος != μηδέν {
log.Fatal(err)
}
Εάν εκτελέσετε τον προηγούμενο κώδικα, θα πρέπει να εισάγει τις καθορισμένες εγγραφές στον πίνακα προορισμού.
Δεδομένα ερωτημάτων PostgreSQL
Για να υποβάλουμε ερώτημα στις σειρές από τον πίνακα, μπορούμε να ορίσουμε τη δήλωση select ως συμβολοσειρά και να χρησιμοποιήσουμε την db.Query() για να την εκτελέσουμε. Μπορούμε να επαναλάβουμε τις σειρές του πίνακα χρησιμοποιώντας τη συνάρτηση Next() και να τις εκτυπώσουμε όπως φαίνεται παρακάτω:
rows, err := db.Query ( 'SELECT * FROM db_clients' )αν πλανώμαι ! = μηδέν {
log.Μοιραία ( πλανώμαι )
}
αναβολή σειρών.Κλείσιμο ( )
Για σειρές.Επόμενο ( ) {
ήταν ταυτότητα ενθ
συμβολοσειρά ονόματος var
var sessionTime time.Time
var numberOfQueries int
var activeState bool
err := σειρές.Σάρωση ( & ταυτότητα , & όνομα, & Ώρα συνεδρίας, & numberOfQueries, & ενεργό κράτος )
αν πλανώμαι ! = μηδέν {
log.Μοιραία ( πλανώμαι )
}
fmt.Εκτύπωση ( 'ID: %d, Όνομα: %s, Χρόνος συνεδρίας: %s, Αριθμός ερωτημάτων: %d, Ενεργή κατάσταση: %t \n ' , ταυτότητα , όνομα, sessionTime, numberOfQueries, activeState )
}
αν err = σειρές.Err ( ) ; πλανώμαι ! = μηδέν {
log.Μοιραία ( πλανώμαι )
}
Μόλις εκτελέσουμε τον προηγούμενο κώδικα, θα πρέπει να εκτυπώσει όλες τις σειρές από τον πίνακα db_clients όπως φαίνεται στο ακόλουθο παράδειγμα εξόδου:
Ορίστε το!
συμπέρασμα
Εξερευνήσαμε πώς μπορούμε να χρησιμοποιήσουμε το πακέτο pq για να συνδέσουμε και να ρωτήσουμε τη βάση δεδομένων PostgreSQL χρησιμοποιώντας Golang.