Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

go-pg/pg

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Repository files navigation

PostgreSQL client and ORM for Golang

Maintenance mode

go-pg is in a maintenance mode and only critical issues are addressed. New development happens in Bun repo which offers similar functionality but works with PostgreSQL, MySQL, MariaDB, and SQLite.


Go PkgGoDev Documentation Chat

Tutorials

Ecosystem

Features

Installation

go-pg supports 2 last Go versions and requires a Go version with modules support. So make sure to initialize a Go module:

go mod init github.com/my/repo

And then install go-pg (note v10 in the import; omitting it is a popular mistake):

go get github.com/go-pg/pg/v10

Quickstart

package pg_test
import (
 "fmt"
 "github.com/go-pg/pg/v10"
 "github.com/go-pg/pg/v10/orm"
)
type User struct {
 Id int64
 Name string
 Emails []string
}
func (u User) String() string {
 return fmt.Sprintf("User<%d %s %v>", u.Id, u.Name, u.Emails)
}
type Story struct {
 Id int64
 Title string
 AuthorId int64
 Author *User `pg:"rel:has-one"`
}
func (s Story) String() string {
 return fmt.Sprintf("Story<%d %s %s>", s.Id, s.Title, s.Author)
}
func ExampleDB_Model() {
 db := pg.Connect(&pg.Options{
 User: "postgres",
 })
 defer db.Close()
 err := createSchema(db)
 if err != nil {
 panic(err)
 }
 user1 := &User{
 Name: "admin",
 Emails: []string{"admin1@admin", "admin2@admin"},
 }
 _, err = db.Model(user1).Insert()
 if err != nil {
 panic(err)
 }
 _, err = db.Model(&User{
 Name: "root",
 Emails: []string{"root1@root", "root2@root"},
 }).Insert()
 if err != nil {
 panic(err)
 }
 story1 := &Story{
 Title: "Cool story",
 AuthorId: user1.Id,
 }
 _, err = db.Model(story1).Insert()
 if err != nil {
 panic(err)
 }
 // Select user by primary key.
 user := &User{Id: user1.Id}
 err = db.Model(user).WherePK().Select()
 if err != nil {
 panic(err)
 }
 // Select all users.
 var users []User
 err = db.Model(&users).Select()
 if err != nil {
 panic(err)
 }
 // Select story and associated author in one query.
 story := new(Story)
 err = db.Model(story).
 Relation("Author").
 Where("story.id = ?", story1.Id).
 Select()
 if err != nil {
 panic(err)
 }
 fmt.Println(user)
 fmt.Println(users)
 fmt.Println(story)
 // Output: User<1 admin [admin1@admin admin2@admin]>
 // [User<1 admin [admin1@admin admin2@admin]> User<2 root [root1@root root2@root]>]
 // Story<1 Cool story User<1 admin [admin1@admin admin2@admin]>>
}
// createSchema creates database schema for User and Story models.
func createSchema(db *pg.DB) error {
 models := []interface{}{
 (*User)(nil),
 (*Story)(nil),
 }
 for _, model := range models {
 err := db.Model(model).CreateTable(&orm.CreateTableOptions{
 Temp: true,
 })
 if err != nil {
 return err
 }
 }
 return nil
}

See also

About

Golang ORM with focus on PostgreSQL features and performance

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /