Как вставить данные в таблицу Postgres с помощью PowerShell или VBScript? - PullRequest
1 голос
/ 29 июня 2009

Мне нужно периодически запрашивать журналы событий на нескольких серверах и вставлять определенные события в таблицу Postgres.

У меня проблемы с выяснением того, как я могу вставить данные в таблицу через ODBC, используя PowerShell и / или VBScript. Я достаточно хорошо знаком как с VBScript, так и с PowerShell в целом, и я могу создать оператор SQL UPDATE, который работает, я просто пытаюсь связать их вместе, чего раньше никогда не делал.

У меня установлен драйвер Postgres ODBC, я настроил источник данных, который тестирует ОК.

Google мне пока не помогает, может кто-нибудь дать указатели?

Ответы [ 2 ]

1 голос
/ 29 июня 2009

С какой частью у вас проблемы? Как далеко вы продвинулись? У вас есть открытое соединение? Вы знаете синтаксис строки подключения?

Подготовить соединение:

Set conn = Server.CreateObject("ADODB.Connection")
conn.Open dsn, dbuser, dbpass

вставка:

insert = "insert into table (col1, col2) values (12, 'Example Record')"
conn.Execute insert
If conn.errors.Count > 0 Then
    Dim counter
    WScript.echo "Error during insert"
    For counter = 0 To conn.errors.Count
        WScript.echo "Error #" & DataConn.errors(counter).Number
        WScript.echo "  Description(" & DataConn.errors(counter).Description & ")"
    Next
Else
    WScript.echo "insert: ok"
End If

для полноты, запрос:

query = "select * from table where col1 = 7"
Set recordSet = conn.execute(query)
' result is an object of type ADODB.RecordSet

Если вы хотите PowerShell, попробуйте этот пост .
Если вам нужно знать строку подключения, попробуйте connectionstrings.com .

0 голосов
/ 15 июля 2009

Спасибо за ответ.

Я использовал больше Googling и, в конце концов, нашел достаточно ADO.NET, чтобы заставить его работать, хотя это не обязательно "правильно".

$DBConnectionString = "Driver={PostgreSQL UNICODE};Server=$DBIP;Port=$DBPort;Database=$DBName;Uid=$DBUser;Pwd=$DBPass;"

$DBConn = New-Object System.Data.Odbc.OdbcConnection
$DBConn.ConnectionString = $DBConnectionString

$DBCmd = $DBConn.CreateCommand()

[void]$DBCmd.Parameters.Add("@TimeStamp", [System.Data.Odbc.OdbcType]::varchar, 26)
[void]$DBCmd.Parameters.Add("@ErrorText", [System.Data.Odbc.OdbcType]::varchar, 4000)

$DBCmd.CommandText = "INSERT INTO errorinfo (errortime,xml) VALUES(?,?)"

$DBCmd.Connection.Open()

$DBCmd.Parameters["@TimeStamp"].Value = $TimeStamp.ToString("yyyy-MM-dd HH:mm:ss")
$DBCmd.Parameters["@ErrorText"].Value = $ErrorText

[void]$DBCmd.ExecuteNonQuery()
...