bash skript soll in datenbank schreiben und leesen

Hallöchen Leute

Melde mich auch mal wieder zurück.
Versuche gerade daten die ein shell skript entgegennimmt in die datenbank (version 8.3) zu schreiben. Sobald das geht sollten auch daten von einem Skript aus der DB geholt werden.

Habe es volgendermassen versucht, bis jetzt ohne Erfolg. Im folgenden Beispiel habe ich die Werte die in die DB sollen einfach durch testeintrag1-4 ersetzt, einfach mal zum testen.

psql -U username --password passwort -h localhost -p 5432 --quiet -c"use -d meinedatenbank; insert into meine_tabelle ("username", "password", "custname") VALUES ('testeintrag1', 'testeintrag2', 'testeintrag3', 'testeintrag4');"

Die Fehlermeldung lautet "Datenbank mit dem Namen “passwort” konnte nicht gefunden werden. :confused:

Stehe hier irgendwie am Berg. Kann mir jemand sagen wie man das macht?

Grüsse
hatori.hanzo

Auf die ganz schnelle:

  • nutze PGPASS anstelle Passwort im Aufruf
  • USE kommt von einer Möchtegern-DB, nutze \c in psql
  • verbinde dich gleich zur gewünschten DB, dann kann das entfallen


    Andreas

Das du mir so viel zutraust ehrt mich sehr :astonished:

OK, werde mich bald dahinter machen, danke für die schnelle Hilfe!

markus

Hallo Leute

Es funktioniert mit dem eintragen in die DB, danke nochmal!

Nun kämpfe ich noch mit dem Abrufen und in Variablen “verpacken” der Daten.
Habe mal ein kleines Script erstellt welches mir einfach die gewünschte Abfrage ausführt. Nur mal um zu sehen wie sich das ganze skripten lässt.

#!/bin/bash


psql meinedatabase -U meinuser <<ENDOFSQL
SELECT username FROM tbl_users where id=7;

ENDOFSQL

exit 0

Wenn ich das Skript ausführe erhalte ich folgendes zurück:

 username
----------
 100008
(1 row)

Der ausgegebene Wert, in diesem Fall 100008, müsste nun einer Variablen zugewiesen werden. :confused:


Gruss
Markus



kretschmer@tux:~$ cat test.sql
datum=`psql test -t -c "select current_date"`

echo $datum

kretschmer@tux:~$ ./test.sql
2009-03-31

Andreas

Btw, ich hoffe, die Eingaben kommen nicht vom User, der dir dort gefährliche Daten in dein Skript unterschieben kann.

Berechtigter Hinweis, Danke.

Andreas

Du solltest auch mal überlegen ob Bash am Terminal so unbedingt sein muss.
Es gibt sicher einige gute Shells aber Bash gehört nicht unbedeint dazu.
Wenn schon Shells dann csh oder zsh. Für deine Aufgabe würde ich
Dir jedoch eher Perl empfehlen. Es ist meist vorhanden und für
solche Sachen prädestiniert und kann via API direkt mit der DB
sprechen (anstatt nur den DB Clienten zu wrappen) ;D

Es braucht ja jetzt keinen Krieg der Shells.

Von jeder Shell sieht der Aufruf von psql (hoffentlich) gleich aus, von daher ändert sich an der Aufgabenstellung nichts.

Und wenn schon Shell, dann “sh”, dann weiß man wenigstens, dass die Sachen auch einigermaßen portabel sind.

Naja, ich finde Perl ist recht kompakt und gut zu gebrauchen:

#!/usr/bin/perl
use DBI;

$DB_name = ‘foo’;
$DB_user = ‘me’;
$DB_pwd = ‘pw’;

$dbh = DBI->connect(“dbi:Pg:dbname=$DB_name”,"$DB_user","$DB_pwd");
print “\nConnection error: $DBI::errstr\n\n”;
$sth = $dbh->prepare(“SELECT vorname FROM tabelle”);
$sth->execute();
while ( ($id,$name) = $sth->fetchrow_array() )
{
print “$id\t\t $name \n”;
}
$sth->finish();
$dbh->disconnect();

Ist mir persönlich lieber wenn es Terminal Jobs auf einer Linux/Unix
Kiste sind. Aber jeder so wie er es mag :slight_smile:

Hi Leute

Das Perl in solchen Fällen der Shell vorzuziehen ist stimmt natürlich. Werde es mir nochmal überlegen ob ich das Tool besser auf Perl umschreiben werde. Es sind halt nur wenige Interoperationen die das System mit der DB führt. Der Rest besteht aus Shell Scripten die Tasks auf dem System ausführen.

Kann mir jemand ein Tutorial für Perl und PGSQL empfehlen?

Gruss
Markus

Die Frage ist natürlich auch, ob es Sinn macht, sich extra für ein Skript in Perl einzuarbeiten? Was ist dann in einem halben Jahr, wenn es was zu warten gibt? Bei Shell-Skripten weißt Du dann, wenn Du das öfters machst, was zu tun ist. Bei Perl musst Du dich dann wahrscheinlich erst wieder einarbeiten.

Habe schon früher mit Perl ein wenig gearbeitet. Kenne es noch aus der Zeit wo CGI verwendet wurde weil es noch kein PHP gab. Allerdings ist nicht mehr viel vom Wissen übrig :astonished: würde mich aber gerne wieder etwas in perl einarbeiten.

Wenn jemandem auf die Schnelle ein aktuelles Tutorial für Perl einfällt wo auch etwas PGSQL drin vorkommt einfach mal posten.

Gruss
markus

Writings Andreas ‘ads’ Scherbaum

Sieht schonmal vielversprechend aus, danke!

Gruss
Markus