使用Powershell连接远程PostgreSQL数据库

9

我正在尝试使用PowerShell连接到远程PostgreSql数据库。由于这是我第一次使用PowerShell,所以如果这是一个新手问题,我很抱歉。以下是我的代码:

$DBConnectionString = "Driver={PostgreSQL UNICODE}:Server=$MyServer;Port=$MyPort;Database=$MyDB;Uid=$MyUid;Pwd=$MyPass;"
$DBConn = New-Object System.Data.Odbc.OdbcConnection;
$DBConn.ConnectionString = $DBConnectionString;
$DBConn.Open();
$DBCmd = $DBConn.CreateCommand();
$DBCmd.CommandText = "SELECT * FROM mytable;";
$DBCmd.ExecuteReader();
$DBConn.Close();

当我运行这个程序时,会出现“使用“0”个参数调用“Open”时发生异常:错误[IM002] [Microsoft] [ODBC驱动程序管理器]找不到数据源名称,也没有指定默认驱动程序”的错误提示。我已经下载并安装了pgsqlodbc驱动程序,但仍然出现此错误。请问有人能提供任何想法,帮助我解决这个问题吗?我已经在互联网上搜索了很多,但目前还没有得到什么有效结果。
谢谢。
5个回答

8

咨询: https://odbc.postgresql.org/
下载: https://www.postgresql.org/ftp/odbc/versions/msi/

在Windows上的数据源(ODBC):开始 → 搜索 → odbc → 用户DSN → 添加/配置

ODBC驱动程序设置截图

示例:

$MyServer = "<ip>"
$MyPort  = "5432"
$MyDB = "<database>"
$MyUid = "<user>"
$MyPass = "<pass>"

$DBConnectionString = "Driver={PostgreSQL UNICODE(x64)};Server=$MyServer;Port=$MyPort;Database=$MyDB;Uid=$MyUid;Pwd=$MyPass;"
$DBConn = New-Object System.Data.Odbc.OdbcConnection;
$DBConn.ConnectionString = $DBConnectionString;
$DBConn.Open();
$DBCmd = $DBConn.CreateCommand();
$DBCmd.CommandText = "SELECT * FROM tb_module;";
$DBCmd.ExecuteReader();
$DBConn.Close();

这对我有用,但我的结果是一个带有标题“FieldCountr”和5行数字3的数组。结果是3列5行,但我该如何将其分配给数组? - sixplus4iszen

7
如果你的客户端上安装了PostgreSQL,你可以使用随之而来的psql。
$dburl="postgresql://exusername:expw@exhostname:5432/postgres"
$data="select * from extable" | psql --csv $dburl | ConvertFrom-Csv

您必须将 psql 添加至环境变量或者直接引用它的路径,例如:C:\Program Files\PostgreSQL\12\bin。在 Powershell 中应该可以输入 "psql" 并看到输出结果。


3

在 Driver 声明后,您的连接字符串中实际上存在一个拼写错误。双冒号被误写成了分号 :)

错误的写法:

{PostgreSQL UNICODE} : Server

正确的:

{PostgreSQL UNICODE} ; Server

3

检查ODBC数据源中是否存在DSN。如果不存在,则需要前往“控制面板”,“管理工具”,“数据源(ODBC)”创建一个。然后选择“添加用户DSN”- 选择PostgreSQL驱动程序,并填写您的服务器和数据库详细信息。测试连接以确保一切正常!


2
我找到了问题所在,我以为已经安装了Postgresql ODBC驱动程序,但实际上并没有。最终,在找到这个网站后,我让它正常工作了:http://code.google.com/p/visionmap/wiki/psqlODBC。然后按照上面的说明进行操作,现在它可以正常使用了。
感谢您的所有帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接