V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhwguest
V2EX  ›  PostgreSQL

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

  •  
  •   zhwguest · 2023-10-20 12:25:35 +08:00 · 1047 次点击
    这是一个创建于 428 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用的是 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 14:31:34 +08:00   ❤️ 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   ·   实用小工具   ·   2381 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 02:27 · PVG 10:27 · LAX 18:27 · JFK 21:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.