You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将CSV导入PostgreSQL已存在的数据库表中?

将CSV数据导入PostgreSQL已存在的表

你之前用SQL Server的PowerShell脚本导入数据的写法是这样的:

Import-Module SqlServer
$connectionString =  Invoke-Sqlcmd -Username "USERNAME" -Password "PASSWORD" -Server "SERVERNAME" -Database "DATABASE_NAME" 
Write-SqlTableData -DatabaseName "DASHBOARD_NAME" -SchemaName "SCHEMA_NAME" -TableName "TABLE_NAME" -Force -InputData -Path 'PATH WHERE THE FILE IS STORED'

针对PostgreSQL,这里给你两种适配的PowerShell实现方案:

方法一:用psql的COPY命令(推荐,性能最优)

psql是PostgreSQL自带的命令行工具,直接用它的COPY命令可以快速导入CSV,不需要额外安装模块。在PowerShell里调用的写法如下:

# 定义参数
$pgUser = "USERNAME"
$pgPassword = "PASSWORD"
$pgHost = "SERVERNAME"
$pgDb = "DATABASE_NAME"
$schemaName = "SCHEMA_NAME"
$tableName = "TABLE_NAME"
$csvPath = "PATH WHERE THE FILE IS STORED"

# 设置环境变量传递密码(避免明文显示)
$env:PGPASSWORD = $pgPassword

# 执行psql命令导入数据
psql -U $pgUser -h $pgHost -d $pgDb -c "COPY $schemaName.$tableName FROM '$csvPath' WITH (FORMAT csv, HEADER true, DELIMITER ',');"

# 清理环境变量
Remove-Item Env:PGPASSWORD

注意:如果CSV里的分隔符不是逗号,要把DELIMITER ','改成你实际的分隔符;如果CSV没有表头,去掉HEADER true。

方法二:用PowerShell的Npgsql模块(类似SqlServer模块的写法)

先安装Npgsql模块(需要管理员权限):

Install-Module -Name Npgsql -Scope CurrentUser

然后编写导入脚本:

Import-Module Npgsql

# 定义参数
$pgUser = "USERNAME"
$pgPassword = "PASSWORD"
$pgHost = "SERVERNAME"
$pgDb = "DATABASE_NAME"
$schemaName = "SCHEMA_NAME"
$tableName = "TABLE_NAME"
$csvPath = "PATH WHERE THE FILE IS STORED"

# 读取CSV数据
$csvData = Import-Csv -Path $csvPath

# 构建连接字符串
$connString = "Host=$pgHost;Username=$pgUser;Password=$pgPassword;Database=$pgDb"

# 批量插入数据
$conn = New-Object Npgsql.NpgsqlConnection($connString)
$conn.Open()

# 生成插入语句模板(假设表的列和CSV表头完全对应)
$columns = $csvData[0].PSObject.Properties.Name -join ", "
$placeholders = ($csvData[0].PSObject.Properties.Name | ForEach-Object { "@$_" }) -join ", "
$sql = "INSERT INTO $schemaName.$tableName ($columns) VALUES ($placeholders)"

$cmd = New-Object Npgsql.NpgsqlCommand($sql, $conn)
$bulkCopy = New-Object Npgsql.NpgsqlBulkCopy($conn)
$bulkCopy.DestinationTableName = "$schemaName.$tableName"

# 加载数据并执行批量插入
$table = New-Object System.Data.DataTable
foreach ($col in $csvData[0].PSObject.Properties.Name) {
    $table.Columns.Add($col)
}
foreach ($row in $csvData) {
    $newRow = $table.NewRow()
    foreach ($col in $csvData[0].PSObject.Properties.Name) {
        $newRow[$col] = $row.$col
    }
    $table.Rows.Add($newRow)
}

$bulkCopy.WriteToServer($table)

# 关闭连接
$conn.Close()

注意:这个方法适合数据量不大的场景,数据量大的话优先用方法一的COPY命令,性能差距很明显。

内容的提问来源于stack exchange,提问作者user19086677

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:55:12