pgsql Datenbank des Medienserver auslesen?

Status
Für weitere Antworten geschlossen.

Derxylakant

Benutzer
Mitglied seit
21. Jan 2010
Beiträge
80
Punkte für Reaktionen
0
Punkte
0
Hallo Community,

ich möchte eine kleine Homepage schreiben, über die man sich alle auf meiner ds110j verfügbaren Filme anzeigen lassen kann bzw. die Auswahl nach verschiedenen Kriterien (z.B. hochgeladen seit $datum, Auflösung > $resolutiony etc.) treffen kann.

Dafür möchte ich die pgsql Datenbank des Medienservers verwenden, da diese immer aktuell ist. Leider habe ich festgestellt, dass das von Synology unterbunden wird, wie Itari in diesem thread schreibt:
http://www.synology-forum.de/showthread.html?4164-Postgres

Nun meine Frage:
Da ich mich in pgsql sowieso komplett neu einarbeiten müsste und mir die syntax von mysql schon ein wenig bekannt wäre, gibt es eine Möglichkeit, die pgsql Datenbank mit einem Skript und per Chron-Job einmal täglich in eine mysql Datenbank zu konvertieren?

Wie würdet ihr vorgehen? Bzw. vlt. arbeitet schon jemand mit dieser Datenbank?

Alternativ könnte man die Datenbank auch täglich in ein ASCII File exportieren und mit diesem arbeiten, allerdings liese sich eine DB in php schöner auslesen als ein ASCII File.

Mit der Bitte um Rat,
DerXylakant
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Solange du lokal auf dem selben Server arbeitest wie die postgres-DB läuft, ist es problemlos möglich die Postgres DB mit den entsprechenden Funktionen auszulesen
 

Derxylakant

Benutzer
Mitglied seit
21. Jan 2010
Beiträge
80
Punkte für Reaktionen
0
Punkte
0
Bist du dir da sicher?

ein

Rich (BBCode):
/usr/syno/pgsql/bin/psql -U admin -d mediaserver -c "select * from video"

über ssh funktioniert, wohingegen ein

PHP:
$dbconn = pg_connect("host=localhost dbname=mediaserver user=admin") or die("Could not connect");

in einem php Skript nicht zum Erfolg führt.

Außerdem schrieb Itari in dem o.g. thread ja, dass sich die Datenbank des Medienservers auf einer Synology DS mittels php Skript nur bewerkstelligen lässt, wenn das Skript in /usr/syno/synoman/phpsrc/ liegt und nicht in /volume1/web.

Also, nochmal kurz und knapp:

1. Bist du mit deiner Aussage sicher? Hat Itari dann unrecht oder habe ich ihn falsch verstanden?

2. Falls es tatsächlich gehen sollte, siehst du dann den Fehler in meinem php Kommando?

Vielen Dank für die Unterstützung,
DerXylakant
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Der pg_connect() geht nur in besagtem Verzeichnis. Die Verhältnisse haben sich nicht geändert. Oder du machst halt einen PHP-exec() mit Shell-Befehl und arbeitest das Ergebnis dann ab.

Itari
 

Derxylakant

Benutzer
Mitglied seit
21. Jan 2010
Beiträge
80
Punkte für Reaktionen
0
Punkte
0
Ok, danke für die Antwort.

Werde mich mal ein bischen einlesen, was exec() angeht..
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
ich verbinde mich immer wieder via pgsql an die DB und nehme Änderungen vor. Von dem her ja ich bin sicher, dass es funzt. Ich habe nie gesagt/behauptet es würde auch via PHP gehen, ich meinte den reinen Postgres Zugriff via Kommandozeile, so wie er bei dir auch zu klappen scheint
 

Derxylakant

Benutzer
Mitglied seit
21. Jan 2010
Beiträge
80
Punkte für Reaktionen
0
Punkte
0
achso ok, verstehe. Danke für die Info.

Dann bleibt vermutlich echt nur der Umweg über exec().

Mal sehen, ob ich das hin bekomme ;)

Gruß,
DerXylakant
 

Derxylakant

Benutzer
Mitglied seit
21. Jan 2010
Beiträge
80
Punkte für Reaktionen
0
Punkte
0
Neues Problem, wusste nicht, ob ich ein neues topic eröffnen sollte, deswegen stell ich's mal hier mit rein:

Der Befehl

PHP:
echo exec('/usr/syno/pgsql/bin/psql -U admin -d mediaserver -c "select * from video"', $array);

bringt kein ergebnis, aber auch keine Fehlermeldung. Über ssh (root) funktioniert er. Jetzt fällt mir auf, kann es an den Hochkomma liegen oder passen die so?

Ich bin davon ausgegangen, dass es daran liegt, der Anwender des php Skripts nicht root ist. Ein

PHP:
echo exec('whoami');

bestetigt das. Er ist
Rich (BBCode):
nobody

Ein workaround, php_exec() als root auszuführen wäre

PHP:
$befehl = '/usr/syno/pgsql/bin/psql -U admin -d mediaserver -c "select * from video"';
$getdb = escapeshellcmd($befehl);
$db1 = exec("sudo -u root -S $getdb < /volume1/rootpasswd 2>&1",$db);

Allerdings ist sudo auf der synology laut Fehlermeldung wohl nicht möglich.

Kann der exec() Befehl auch ohne sudo als root ausgeführt werden?

Bzw. ist das überhaupt mein Problem?

Jemand eine Idee?

Viele Grüße,
DerXylakant

(ich weiss, ich mach meinem Namen alle Ehre, lol)
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
vergiss es mit sudo root werden zu wollen aus einem Script. Das würde ja das PW auf der Konsole abfragen und solche Dinge kannst du mit Scripten nicht. Leg das Script unter dem root Apache ab, dann wird es immer unter root ausgeführt. Zusätzlich müsstest auch sicherstellen, dass keine openbasedir Restriktionen auf pgsql zum Tragen kommen. Btw. Dein Kommando stimmt ganz sicher nicht. Wenn $befehl auf der Konsole funzt, fresse ich einen Besen und zwar quer (Tipp ist ein kleiner Fehler) ;)
 

Derxylakant

Benutzer
Mitglied seit
21. Jan 2010
Beiträge
80
Punkte für Reaktionen
0
Punkte
0
PHP:
.. -u root ..
meine ich natürlich. :eek:

Hatte ich aber auch so versucht. War mit admin nur ne Verzweiflungstat :cool:

Danke für den Hinweis mit Apache root! Werde ich die Tage mal testen.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Es ist etwas tricky mit der postgres DB. Der Befehl sollte nämlich vom Datenbankuser admin abgesetzt werden. Dummerweise laufen weder User-Apache noch Syno-Apache unter admin. Mit dem User Server wird es nie gehen, weil du kaum das PW für su an die Shell bringen wirst. Also bleibt nur der Syno-Apache unter root. Ich habe mal ein bissl mit meiner Postgres DB getestet und ich kann mit PHP drauf zugreifen. Folgendes funzt bei mir:
PHP:
#!/usr/bin/php
<?php
$db = pg_connect("host=localhost dbname=photo user=admin password=meinPW") or die(pg_last_error());
$query = 'SELECT * FROM photo_user';
$result = pg_query($query) or die(pg_last_error());
echo "<table>\n";
while ($line = pg_fetch_array($result, null, PGSQL_ASSOC)) {
    echo "\t<tr>\n";
    foreach ($line as $col_value) {
        echo "\t\t<td>$col_value</td>\n";
    }
    echo "\t</tr>\n";
}
echo "</table>\n";

// Free resultset
pg_free_result($result);

// Closing connection
pg_close($db);
?>
obiges funzt als Kommandozeilenscript weil ich bei mir beim Systemapache die PHP Unterstützung nicht eingebaut habe. Müsste aber ganz analog via Browser auch gehen, wenn das PHP Modul in der Konfig des Root-Apache eingebaut ist. Wie das geht steht hier irgendwo im Forum. Und itari hat afaik noch ein spk Paket, welches den root Apache für PHP fitt macht
 

Derxylakant

Benutzer
Mitglied seit
21. Jan 2010
Beiträge
80
Punkte für Reaktionen
0
Punkte
0
Erstmal vielen Dank für die ausführlichen Infos jahlives!

Das heißt für mich in den nächsten Tagen,

1.das Paket von itari im Forum suchen, um php für den Apache root frei schalten und

2. das php Modul in der config des root apache einbinden.

Hab jetzt zwar noch keinen Plan wie das geht, aber da werde ich mich einlesen. Hoffe, dass ich das spätestens am WE auf die Reihe kriege.

Also danke nochmal und ich melde mich, wenn ich (wovon ich ausgehe ;) ) nochmal etwas zu diesem Thema fragen muss.

Bis die Tage,
DerXylakant
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat