PostgreSQL Support in Go: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
(→Query) |
||
Line 80: | Line 80: | ||
=Query= | =Query= | ||
<syntaxhighlight lang='go'> | <syntaxhighlight lang='go'> | ||
sql := `SELECT "ID", "NAME" FROM TEST` | |||
rows, err := db.Query(sql) | |||
if err != nil { | |||
... | |||
} | |||
defer rows.Close() | |||
for rows.Next() { | |||
var id int | |||
var name string | |||
err = rows.Scan(&id, &name) | |||
if err != nil { | |||
... | |||
} | |||
} | |||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 03:57, 14 October 2023
Internal
Open a Connection
import (
"database/sql"
_ "github.com/lib/pq"
)
...
role := "ovidiu"
password := "something"
databaseHost := "localhost"
databaseName := "testdb"
url := fmt.Sprintf("postgres://%s:%s@%s/%s?sslmode=disable", role, password, databaseHost, databaseName)
db, err := sql.Open("postgres", url)
if err != nil {
...
}
defer func() {
if err := db.Close(); err != nil {
...
}
}()
err = db.Ping()
if err != nil {
...
}
sql.Open()
returns a database handle. The implementation maintains a pool of zero or more underlying connections, and it is safe for concurrent use by multiple goroutines.
Create a Table
sql := `CREATE TABLE IF NOT EXISTS TEST ("ID" int, "NAME" varchar(10))`
_, err = db.Exec(sql)
if err != nil {
...
}
Delete a Table
sql := `DROP TABLE TEST`
_, err = db.Exec(sql)
if err != nil {
...
}
Insert a Row
sql := `INSERT INTO TEST ("ID", "NAME") VALUES (10, 'Bob')`
_, err = db.Exec(sql)
if err != nil {
...
}
Update a Row
sql := `UPDATE TEST SET "ID"=$1 WHERE "NAME"=$2`
_, err = db.Exec(sql, 20, "Bob")
if err != nil {
...
}
Delete a Row
sql := `DELETE FROM TEST WHERE "ID"=$1`
_, err = db.Exec(sql, 20)
if err != nil {
...
}
Query
sql := `SELECT "ID", "NAME" FROM TEST`
rows, err := db.Query(sql)
if err != nil {
...
}
defer rows.Close()
for rows.Next() {
var id int
var name string
err = rows.Scan(&id, &name)
if err != nil {
...
}
}