哪位大神给一个 golang 访问 postgres 的 stored procedure 的例子代码啊? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhwguest
V2EX    PostgreSQL

哪位大神给一个 golang 访问 postgres 的 stored procedure 的例子代码啊?

  •  
  •   zhwguest 2023 年 10 月 20 日 1416 次点击
    这是一个创建于 846 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用的是 postgres 11 ,现在想简单试一下(当然这个例子本身没有太多实际用途)。比如据 id 找到名字。

    CREATE TABLE tabnames( id SERIAL PRIMARY KEY, name TEXT ); CREATE OR REPLACE PROCEDURE get_id_by_name(in_id BIGINT, INOUT out_name TEXT) LANGUAGE plpgsql AS $$ BEGIN SELECT name INTO out_name FROM tabnames WHERE id = in_id; END; $$; 

    我想在 golang 中通过call get_id_by_name()获取返回的out_name。怎么都不成功,out_name总是空的。 另外,我如果在 psql 命令中,如何调用上面这个 sp ,然后获取名字啊?

    先感谢各位,再嗦一句,这个例子只是为了看看语法上怎么调用。并不讨论实际的目的,当然不想用一个select name from tabnames where id=$1来 exec 然后 scan 。

    1 条回复    2023-10-20 14:31:34 +08:00
    MajestySolor
        1
    MajestySolor  
       2023 年 10 月 20 日   1
    ai 的回答


    以下是一个使用 Golang 访问 PostgreSQL 存储过程的示例代码:

    ```
    Copy
    package main

    import (
    "database/sql"
    "fmt"

    _ "github.com/lib/pq"
    )

    func main() {
    // 连接到 PostgreSQL 数据库
    connStr := "host=localhost port=5432 user=your_username password=your_password dbname=your_database sslmode=disable"
    db, err := sql.Open("postgres", connStr)
    if err != nil {
    panic(err)
    }
    defer db.Close()

    // 准备调用存储过程的 SQL 查询语句
    query := "SELECT * FROM your_stored_procedure($1, $2)"

    // 执行存储过程并获取结果
    rows, err := db.Query(query, "parameter1", "parameter2")
    if err != nil {
    panic(err)
    }
    defer rows.Close()

    // 处理查询结果
    for rows.Next() {
    var column1 string
    var column2 int
    err := rows.Scan(&column1, &column2)
    if err != nil {
    panic(err)
    }
    fmt.Println(column1, column2)
    }

    if err = rows.Err(); err != nil {
    panic(err)
    }
    }
    ```

    请确保将 your_username 、your_password 、your_database 和 your_stored_procedure 替换为实际的数据库凭据和存储过程名称。还要根据实际情况修改 PostgreSQL 数据库的连接字符串。

    这个示例代码使用 database/sql 包和 github.com/lib/pq 驱动程序来连接和执行 PostgreSQL 数据库的存储过程。首先,它建立到数据库的连接,然后使用 db.Query 方法执行存储过程的 SQL 查询语句,并将参数传递给存储过程。最后,它遍历查询结果并处理每一行的数据。

    请根据您的实际情况修改和扩展示例代码。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2437 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 61ms UTC 12:29 PVG 20:29 LAX 04:29 JFK 07:29
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86