首页 > 后端开发 > Golang > 如何使用 Go 将行从 STDIN 导入 PostgreSQL?

如何使用 Go 将行从 STDIN 导入 PostgreSQL?

Susan Sarandon
发布: 2024-10-24 16:06:01
原创
433 人浏览过

How to Import Rows into PostgreSQL from STDIN Using Go?

使用 Go 将行从 STDIN 导入 PostgreSQL

在 Go 中,您可以使用 pq 将行从标准输入 (STDIN) 导入 PostgreSQL包裹。这种方法直接将数据输入数据库,不需要中间文件。

要实现从 STDIN 直接导入行,请按照以下步骤操作:

  1. 打开 PostgreSQL 连接: 使用 sql.Open 函数建立与 PostgreSQL 数据库的连接。
  2. 开始事务: 使用 Begin 函数将多个语句组合在一起启动数据库事务。
  3. 准备复制语句:使用 pq.CopyIn 创建用于复制数据的准备语句。此语句指定目标表名称和要导入的列。
  4. 导入行: 针对要导入的每一行数据迭代执行准备好的语句。使用 Exec 函数将每一行发送到数据库。
  5. 终止复制语句:添加所有行后,再次执行准备好的语句(不带任何参数)以完成导入过程。
  6. 关闭准备好的语句:通过调用 Close 方法释放与准备好的语句关联的资源。
  7. 提交事务:提交事务以使更改永久化

示例代码:

以下代码示例演示使用 Go 从 STDIN 导入行:

<code class="go">package main

import (
    "database/sql"
    "fmt"
    "io"
    "log"

    "github.com/lib/pq"
)

func main() {
    db, err := sql.Open("postgres", "host=localhost port=5432 user=postgres password=mysecret dbname=mydatabase")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    rows := [][]string{
        {"Rob", "Pike"},
        {"Ken", "Thompson"},
        {"Robert", "Griesemer"},
    }

    txn, err := db.Begin()
    if err != nil {
        log.Fatal(err)
    }

    stmt, err := txn.Prepare(pq.CopyIn("test", "first_name", "last_name"))
    if err != nil {
        log.Fatal(err)
    }

    for _, r := range rows {
        if _, err = stmt.Exec(r[0], r[1]); err != nil {
            log.Fatal(err)
        }
    }

    if _, err = stmt.Exec(); err != nil {
        log.Fatal(err)
    }

    if err = stmt.Close(); err != nil {
        log.Fatal(err)
    }

    if err = txn.Commit(); err != nil {
        log.Fatal(err)
    }

    fmt.Println("Rows imported successfully.")
}</code>
登录后复制

通过遵循这些步骤并利用 pq 包,您可以在 Go 程序中直接从 STDIN 高效地将数据导入到 PostgreSQL。

以上是如何使用 Go 将行从 STDIN 导入 PostgreSQL?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板