【发布时间】:2014-01-13 21:36:47
【问题描述】:
我正在从 Powershell 创建“动态”sql 语句并将其传递给 Windows 上的 PostGreSQL 服务器。
下面是代码
for ($i=1; $i -le 9; $i++)
{
$CurDate = (get-date -format "yyyy-MM-dd HH:mm:ss")
$BatchLogInsert = "Insert into `"TEMP`".`"batchLog`" (batchid, filename, status, createdate) values ('" + $NewBatchID + "','File"+$i+"','Init','"+$CurDate+"');"
write-host $BatchLogInsert
C:\PostgreSQL\9.3\bin\psql.exe -h $DBSERVER -U $DBUSER -d $CLIENTPREFIX -w -c $BatchLogInsert
}
写主机返回:
Insert into "TEMP"."batchLog" (batchid, filename, status, createdate) values ('3','File1','Init','2014-01-13 16:24:49');
Insert into "TEMP"."batchLog" (batchid, filename, status, createdate) values ('3','File2','Init','2014-01-13 16:24:49');
Insert into "TEMP"."batchLog" (batchid, filename, status, createdate) values ('3','File3','Init','2014-01-13 16:24:49');
等等。
当我在 PGAdmin 的“查询”窗口中执行这些插入时,它可以工作。但是,当我调用 psql.exe 时,它会说
ERROR: Relation "TEMP.batchLog" does not exist
LINE 1: Insert into TEMP.batchLog (batchid, filename, status, created...
我在这里做错了什么?
编辑:这是我的 powershell 窗口和 PgAdmin 窗口的屏幕截图...
【问题讨论】:
-
要么您没有在
psql和 pgAdmin 中执行相同的查询,或者(更有可能)您没有连接到同一个数据库。 -
"TEMP.batchLog"与"TEMP"."batchLog"不同(可能您的 pgadmin 提交根本不包含任何引号) -
@MilenA.Radev 我知道这似乎是错误的,但是,不知道什么是显示我正在尝试连接到正确数据库的好方法。这是我第一次使用 PostGreSql,但我遇到了似乎让简单插入正常工作的问题
-
@wildplasser 如上所述,我相信,我已经将 Powershell(写入主机)的输出运行到 PgAdmin,并且它工作正常。然而,这让我不知道要完成这样一件微不足道的事情。
-
用反斜杠 和 反引号转义双引号。
标签: sql postgresql powershell