Skip to main content

在 Go 应用程序中使用 RisingWave

由于 RisingWave 与 PostgreSQL 兼容,您可以使用第三方 PostgreSQL 驱动程序从 Python 应用程序与 RisingWave 交互。

在本指南中,我们使用 pgx 驱动程序连接 RisingWave。

运行 RisingWave

要了解如何运行 RisingWave,请参阅运行 RisingWave

安装 pgx 驱动程序

运行以下命令安装 pgx 驱动程序:

go get github.com/jackc/pgx/v4

连接到 RisingWave

通过 pgx 连接到 RisingWave:

package main

import (
"context"
"fmt"
"log"

"github.com/jackc/pgx/v4"
)

func main() {
// 请用实际的凭据替换占位符。
connStr := "postgres://USER:PASSWORD@localhost:4566/DATABASE"
conn, err := pgx.Connect(context.Background(), connStr)
if err != nil {
log.Fatalf("Unable to connect to RisingWave: %v\n", err)
}
defer conn.Close(context.Background())

fmt.Println("Connected to RisingWave")
}

创建 source

下面的代码可创建一个带有 datagen 连接器的 source walkdatagen 连接器用于生成模拟数据。walk source 由 distanceduration 两列组成,分别表示步行的距离和持续时间。该 source 是智能手表所跟踪数据的简化版本。

请注意,代码需要放在函数中。

sql := `CREATE TABLE walk(distance INT, duration INT)
WITH (
connector = 'datagen',
fields.distance.kind = 'sequence',
fields.distance.start = '1',
fields.distance.end = '60',
fields.duration.kind = 'sequence',
fields.duration.start = '1',
fields.duration.end = '30',
datagen.rows.per.second='15',
datagen.split.num = '1'
) FORMAT PLAIN ENCODE JSON`

_, err := conn.Exec(context.Background(), sql)
return err

创建物化视图

本节的代码可创建一个物化视图 counter,获取最新的总距离和持续时间。请注意,代码需要放在函数中。

sql := `CREATE MATERIALIZED VIEW counter AS 
SELECT
SUM(distance) as total_distance,
SUM(duration) as total_duration
FROM walk`

_, err := conn.Exec(context.Background(), sql)
return err

查询物化视图

本节的代码可查询物化视图 counter,获取实时数据。请注意,代码需要放在函数中。

sql := `SELECT * FROM counter`
rows, err := conn.Query(context.Background(), sql)
if err != nil {
return err
}
defer rows.Close()

for rows.Next() {
var total_distance, total_duration float64
err = rows.Scan(&total_distance, &total_duration)
if err != nil {
return err
}
fmt.Printf("Total Distance: %.2f, Total Duration: %.2f\n", total_distance, total_duration)
}
return rows.Err()