GO GORM POSTGRES MIGRATIONS
GO GORM POSTGRES MIGRATIONS
Инструкция по запуску миграций написана для ОС Ubuntu 22.04
Версия go должна быть >=1.19
Установка необходимой версии на примере 1.19 golang:
$ sudo apt-get remove golang-go
$ sudo apt-get remove --auto-remove golang-go
$ sudo add-apt-repository ppa:longsleep/golang-backports
$ sudo apt-get update
$ sudo apt-get install golang-go
$ sudo apt-get install golang-1.19
$ ln -s /usr/lib/go-1.19/bin/go /usr/bin/
$ go version
go version go1.19.5 linux/amd64
Подтягиваем зависимости для запуска миграций:
$ cd /opt
$ go mod init module-name
$ go env -w GO111MODULE=auto
$ go get gorm.io/gorm
$ go get gorm.io/driver/postgres
Запуск тестовой миграции:
$ go run /opt/migrate.go
Successfully connected!
2024/11/30 12:12:56 Created User: &{1 john_doe john_doe_1@local}
2024/11/30 12:12:56 User by ID: &{1 john_doe john_doe_1@local}
2024/11/30 12:12:56 Updated User: &{1 john_doe john_doe_2@local}
2024/11/30 12:12:56 Deleted User: &{1 john_doe john_doe_2@local}
Код программы миграций:
$ cat migrate.go
package main
import (
"gorm.io/driver/postgres"
"gorm.io/gorm"
"log"
"fmt"
)
type User struct {
ID uint `gorm:"primaryKey"`
Username string `gorm:"unique"`
Email string
}
func createUser(db *gorm.DB, user *User) error {
result := db.Create(user)
if result.Error != nil {
return result.Error
}
return nil
}
func getUserByID(db *gorm.DB, userID uint) (*User, error) {
var user User
result := db.First(&user, userID)
if result.Error != nil {
return nil, result.Error
}
return &user, nil
}
func updateUser(db *gorm.DB, user *User) error {
result := db.Save(user)
if result.Error != nil {
return result.Error
}
return nil
}
func deleteUser(db *gorm.DB, user *User) error {
result := db.Delete(user)
if result.Error != nil {
return result.Error
}
return nil
}
func main() {
dsn := "user=app_user_go password=111 dbname=app_db_go host=127.0.0.1 port=5432 sslmode=disable"
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatal(err)
}
fmt.Println("Successfully connected!")
// Perform database migration
err = db.AutoMigrate(&User{})
if err != nil {
log.Fatal(err)
}
// Create a new user
newUser := &User{Username: "john_doe", Email: "john_doe_1@local"}
err = createUser(db, newUser)
if err != nil {
log.Fatal(err)
}
log.Println("Created User:", newUser)
// Query user by ID
userID := newUser.ID
user, err := getUserByID(db, userID)
if err != nil {
log.Fatal(err)
}
log.Println("User by ID:", user)
// Update user
user.Email = "john_doe_2@local"
err = updateUser(db, user)
if err != nil {
log.Fatal(err)
}
log.Println("Updated User:", user)
// Delete user
err = deleteUser(db, user)
if err != nil {
log.Fatal(err)
}
log.Println("Deleted User:", user)
}
Комментарии пользователей
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!