首页 > 解决方案 > 使用 C# 将数据从 CSV 文件批量复制到 PostgreSQL 数据库

问题描述

我有一个 CSV 文件,其中包含需要复制到云上 Postgres 数据库中的表的数据。我可以从 C# 控制台应用程序中执行此操作吗?如果可以,语法是什么?到目前为止,我发现的所有内容都没有给我一个明确的例子,如何从 C# 进行调用。在我的应用程序中,我使用 DSN 连接(PostgreSQL ODBC 驱动程序)到 Postgres 数据库。CSV 文件可以是本地文件或 S3 存储桶中的文件。

这是我的代码(简化了一点):

string filePath = "C:\Bluh\Data.CSV";
string sql = string.Format("COPY {0}.{1} FROM '{2}' DELIMITER ',' CSV HEADER ", postgres_catalog, stagingTableName, filePath);
using (OdbcCommand command = new OdbcCommand(sql))
{
   OdbcConnection SQLConn = new OdbcConnection(DBConnectionString);
   SQLConn.Open();
   sc.Connection = SQLConn;
   command.ExecuteNonQuery();
}

当我使用上面的代码时,我收到一个错误:

ERROR [42501] ERROR: must be superuser or a member of the pg_read_server_files role to COPY from a file;

如果我不能对本地文件使用 COPY 命令,如何在 S3 存储桶中指定该文件的路径?语法是什么?

干杯!

标签: c#postgresqlcsvamazon-s3

解决方案


这是我发现的和对我有用的

        string sql = "SELECT aws_s3.table_import_from_s3('SCHEMA.TABLENAME','COLUMN_A, COLUMN_B', '(FORMAT CSV, HEADER True)', aws_commons.create_s3_uri('S3-Bucket-Name', 'FileName.csv', 'awsRegion'))";

        using (OdbcCommand command = new OdbcCommand(sql))
        {
            ExecuteNonQuery(command);
        }

确保您在 DSN 中使用的帐户具有足够的权限。

另请注意,文件名区分大小写,包括扩展名


推荐阅读