postgreSQLの insert と update の基本形
PostgreSQLで、新規のデータならinsert, 書き換えならupdate をしようと思ったのですが、なんか面倒くさいので、初期テーブルを沢山作っておくことで対応することしました。
というか、そういうメソッドを準備しておいて欲しい→あるみたいですが、上手く動かせませんでした。
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/lib/pq" // ←これを追記
)
func main() {
// user_log, bike_logへのアクセス
dbAgent, err := sql.Open("postgres", "user=postgres password=password host=192.168.0.23 port=15432 dbname=agent_db sslmode=disable")
if err != nil {
log.Fatal("dbAgent OpenError: ", err)
}
defer dbAgent.Close()
err = dbAgent.Ping()
if err != nil {
log.Fatal(err, "\nHint: dbAgent Database may not have started")
}
// user_logテーブルの内容の全削除
dbAgent.Query("delete from bike_log;")
// insertのテスト
for i := 0; i < 10; i++ {
str := fmt.Sprintf("insert into bike_log (stationid, num_bikes) values(%d, -1)", i)
fmt.Println(str)
dbAgent.Query(str)
}
// updateのテスト
for i := 0; i < 10; i = i + 2 {
str := fmt.Sprintf("update bike_log set num_bikes = %d where stationid = %d", i*2, i)
fmt.Println(str)
dbAgent.Query(str)
}
}
出力結果
C:\Users\ebata\yamaguchi\src_try1\others> go run main4.go
insert into bike_log (stationid, num_bikes) values(0, -1)
insert into bike_log (stationid, num_bikes) values(1, -1)
insert into bike_log (stationid, num_bikes) values(2, -1)
insert into bike_log (stationid, num_bikes) values(3, -1)
insert into bike_log (stationid, num_bikes) values(4, -1)
insert into bike_log (stationid, num_bikes) values(5, -1)
insert into bike_log (stationid, num_bikes) values(6, -1)
insert into bike_log (stationid, num_bikes) values(7, -1)
insert into bike_log (stationid, num_bikes) values(8, -1)
insert into bike_log (stationid, num_bikes) values(9, -1)
update bike_log set num_bikes = 0 where stationid = 0
update bike_log set num_bikes = 4 where stationid = 2
update bike_log set num_bikes = 8 where stationid = 4
update bike_log set num_bikes = 12 where stationid = 6
update bike_log set num_bikes = 16 where stationid = 8
データベースの中身
agent_db=# select * from bike_log;
stationid | num_bikes
-----------+-----------
1 | -1
3 | -1
5 | -1
7 | -1
9 | -1
0 | 0
2 | 4
4 | 8
6 | 12
8 | 16
(10 rows)