Postgresql 从存储过程中检索结果的惯用方法是什么?

Postgresql 从存储过程中检索结果的惯用方法是什么?,postgresql,go,Postgresql,Go,我看到的大多数存储过程示例都返回一行一列,并且可以与QueryRow一起使用。这里我使用一个表作为输出。上面返回4行: DROP function mytest(); CREATE OR REPLACE FUNCTION mytest() RETURNS TABLE(name text, age int) AS $$ SELECT name, age FROM names $$ LANGUAGE sql; 在Go中,处理元组的惯用方法是什么: mytest ------

我看到的大多数存储过程示例都返回一行一列,并且可以与QueryRow一起使用。这里我使用一个表作为输出。上面返回4行:

DROP function mytest();
CREATE OR REPLACE FUNCTION mytest() 
RETURNS TABLE(name text, age int)
 AS 
$$ 
SELECT name, age FROM names
$$ 
LANGUAGE sql;
在Go中,处理元组的惯用方法是什么:

    mytest   
------------
 (bob,12)
 (fred,18)
 (james,22)
 (bill,27)
(4 rows)
//打印一些元组:

rows, err := db.Query("SELECT mytest()")
if err != nil {
    panic(err)
}

defer rows.Close()
for rows.Next() {
    var items string

    if err = rows.Scan(&items); err != nil {
        panic(err)
    }

    log.Println(items) // items is a string...now what?

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

也许有一个包裹,但我还没有找到它;(

您可以尝试PostgreSQL typesafe1 ORM,而不是查询,例如

你可以在这本书中看到卡拉克斯

  • kallax的首要任务是为数据访问层提供类型安全性
  • kallax的另一个目标是确保所有模型首先是Go结构,而不必使用特定于数据库的类型,例如sql.NullInt64。还提供了对所有基本Go类型的数组和切片以及所有JSON和数组运算符的支持

使用
select*from mytest()
Use Query not QueryRow并将数据存储到合适的结构中,例如结构数组或映射[string]接口数组。postgres中的“表意”方式是:不要使用“存储过程”。只需假设它们不存在。而是动态生成查询或使用预处理视图。
(bob,12)
(fred,18)
(james,22)
(bill,27)