Frage zum DBI-Modul

Frage zum DBI-Modul

am 09.05.2007 15:32:38 von Jan Schmidt

Hallo NG,

perl soll mit dbi auf einen mysql-Server zugreifen. Auf diesem sind
mehrere Datenbanken, die ggf. miteinander verknüpft werden müssen.

Bei DBI->connect muß auch der Name der Datenbank mit angegeben
werden. Folglich kann ich keine select-Anweisung bauen, die auf
verschiedene Datenbanken zugreift (jedenfalls ist mir das nicht
gelungen).

Welche Möglichkeiten gibts dazu?

Danke,
jan

Re: Frage zum DBI-Modul

am 09.05.2007 15:37:51 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: Frage zum DBI-Modul

am 09.05.2007 15:37:51 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: Frage zum DBI-Modul

am 09.05.2007 15:58:08 von Jan Schmidt

Andreas Kretschmer writes:

> Andere RDBMS haben Schemas.

Nur zum Verständnis:

Schema: virtuelle Datenbank, enthält Tabellen aus verschiedenen
Datenbanken

-> wie kann man sowas erzeugen. Habe keinen sql-Befehl gefunden.

View: virtuelle Tabelle, enthält Spalten aus u.U. verschiedenen
Tabellen einer Datenbank

jan

Re: Frage zum DBI-Modul

am 09.05.2007 16:20:04 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: Frage zum DBI-Modul

am 09.05.2007 16:44:40 von Andreas Scherbaum

Jan Schmidt wrote:
> Andreas Kretschmer writes:
>
>> Andere RDBMS haben Schemas.
>
> Nur zum Verständnis:
>
> Schema: virtuelle Datenbank, enthält Tabellen aus verschiedenen
> Datenbanken
>
> -> wie kann man sowas erzeugen. Habe keinen sql-Befehl gefunden.

Mit CREATE SCHEMA ... aber nur in den "anderen RDBMS" von denen
Andreas Kretschmer sprach. Mysql bildet so etwas ähnliches ab,
indem man Queries über mehrere Datenbanken hinweg stellen kann.

Wird nur irgendwann umständlich, wenn eine der Datenbanken
umzieht ...


Bye

--
Andreas 'ads' Scherbaum
Failure is not an option. It comes bundled with your Microsoft product.
(Ferenc Mantfeld)

Re: Frage zum DBI-Modul

am 09.05.2007 16:54:31 von Joachim Durchholz

Jan Schmidt schrieb:
> [Ich kann] keine select-Anweisung bauen, die auf
> verschiedene Datenbanken zugreift (jedenfalls ist mir das nicht
> gelungen).
>
> Welche Möglichkeiten gibts dazu?

Keine. Sind Daten in verschiedenen Datenbanken, lassen sie sich nicht
miteinander verknüpfen (jedenfalls nicht mit den Bordmitteln von mysql).

Willst Du Daten verknüpfen, müssen sie in der gleichen Datenbank sein.
Das liegt so eigentlich auch in der Absicht des SQL-Standards. Manchmal
*will* man ja, dass bestimmte Daten nicht miteinander verknüpfbar sind
(Datenschutz, Geheimhaltung).
Sollen in diesem Fall Daten miteinander verknüpfbar gemacht werden,
sollten sie in die gleiche Datenbank umgezogen werden.

Grüße
Jo

Re: Frage zum DBI-Modul

am 09.05.2007 16:54:31 von Joachim Durchholz

Jan Schmidt schrieb:
> [Ich kann] keine select-Anweisung bauen, die auf
> verschiedene Datenbanken zugreift (jedenfalls ist mir das nicht
> gelungen).
>
> Welche Möglichkeiten gibts dazu?

Keine. Sind Daten in verschiedenen Datenbanken, lassen sie sich nicht
miteinander verknüpfen (jedenfalls nicht mit den Bordmitteln von mysql).

Willst Du Daten verknüpfen, müssen sie in der gleichen Datenbank sein.
Das liegt so eigentlich auch in der Absicht des SQL-Standards. Manchmal
*will* man ja, dass bestimmte Daten nicht miteinander verknüpfbar sind
(Datenschutz, Geheimhaltung).
Sollen in diesem Fall Daten miteinander verknüpfbar gemacht werden,
sollten sie in die gleiche Datenbank umgezogen werden.

Grüße
Jo

Re: Frage zum DBI-Modul

am 09.05.2007 16:58:02 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)

Re: Frage zum DBI-Modul

am 09.05.2007 16:58:02 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)

Re: Frage zum DBI-Modul

am 09.05.2007 17:04:30 von Joachim Durchholz

Andreas Kretschmer schrieb:
> create schema foo;
>
> Schemas sind dann eigenständige Namensräume, man kann denen auch Rechte
> geben etc., man kann Suchpfade darauf setzen u.s.w.
> Zugriff auf Tabellen in anderen Schemas erfolgen dann via schema.table
> (falls kein search_path drauf ist bzw. andere Schemas im search_path
> vorher stehen)
> Kann aber MySQL IMHO derzeit nicht.

Nö, kann es auch nicht. Sowas geht über den SQL-Standard hinaus.
Man muss das wohl auch mit dem Begriff etwas aufpassen. "Schema" ist
eigentlich das Datenbankschema, also eine Liste aller Tabellen mit ihren
Spaltenstrukturen und Relationen. Wenn man mehrere physische Datenbanken
zu einer logischen Datenbank zusammenfasst, hat das Gesamtkonstrukt
natürlich auch ein Schema, aber das ist eigentlich nicht der Kern des
Ganzen. Man muss also ein bisschen aufpassen, dass man nicht
missverstanden wird, wenn man außerhalb der pgsql-Gemeine von einem
"Schema" spricht.

Grüße
Jo

Re: Frage zum DBI-Modul

am 09.05.2007 17:08:22 von Frank Seitz

Joachim Durchholz wrote:
>
> Willst Du Daten verknüpfen, müssen sie in der gleichen Datenbank sein.

Für MySQL mag das so sein, für andere DBMSe gilt das nicht.
Beispiel: Oracle, da kann man sog. Database Links definieren.
Damit lassen sich Tabellen aus entfernten Datenbanken ansprechen
als wären sie in der lokalen Datenbank.

> Das liegt so eigentlich auch in der Absicht des SQL-Standards.

Das hat mit dem SQL-Standard nichts zu tun.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Re: Frage zum DBI-Modul

am 09.05.2007 17:08:22 von Frank Seitz

Joachim Durchholz wrote:
>
> Willst Du Daten verknüpfen, müssen sie in der gleichen Datenbank sein.

Für MySQL mag das so sein, für andere DBMSe gilt das nicht.
Beispiel: Oracle, da kann man sog. Database Links definieren.
Damit lassen sich Tabellen aus entfernten Datenbanken ansprechen
als wären sie in der lokalen Datenbank.

> Das liegt so eigentlich auch in der Absicht des SQL-Standards.

Das hat mit dem SQL-Standard nichts zu tun.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Re: Frage zum DBI-Modul

am 09.05.2007 17:09:02 von Christian Kirsch

Am 09.05.2007 15:32 schrieb Jan Schmidt:
> Hallo NG,
>
> perl soll mit dbi auf einen mysql-Server zugreifen. Auf diesem sind
> mehrere Datenbanken, die ggf. miteinander verknüpft werden müssen.
>
> Bei DBI->connect muß auch der Name der Datenbank mit angegeben
> werden. Folglich kann ich keine select-Anweisung bauen, die auf
> verschiedene Datenbanken zugreift (jedenfalls ist mir das nicht
> gelungen).
>

Warum ist Dir das nicht gelungen? Und warum ist das ein DBI-Problem?
Wenn Du mit mysql (Kommandozeilen-Client) arbeitest, dann gibst Du
doch auch genau eine Datenbank an, zu der Du eine Verbindung aufbaust:

mysql -u bla datenbank

Wer oder was hindert Dich daran, in DBI genau dasselbe zu tun wie in
mysql, nämlich
SELECT bla, fasel from db1.table1, db2.table2;
?
Vorausgesetzt natürlich, Du hast die passenden Rechte für die andere
Datenbank.

Re: Frage zum DBI-Modul

am 09.05.2007 17:11:45 von Christian Kirsch

Am 09.05.2007 16:54 schrieb Joachim Durchholz:
> Jan Schmidt schrieb:
>> [Ich kann] keine select-Anweisung bauen, die auf
>> verschiedene Datenbanken zugreift (jedenfalls ist mir das nicht
>> gelungen).
>>
>> Welche Möglichkeiten gibts dazu?
>
> Keine. Sind Daten in verschiedenen Datenbanken, lassen sie sich nicht
> miteinander verknüpfen (jedenfalls nicht mit den Bordmitteln von mysql).
>
Bei Dir funktioniert ein
select bla, fasel from db1.table1, db2.table2
trotz passender Rechte auf db1.table1 und db2.table2 nicht? Fehlermeldung?

Re: Frage zum DBI-Modul

am 09.05.2007 17:30:56 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)

Re: Frage zum DBI-Modul

am 09.05.2007 17:36:33 von Christian Kirsch

Am 09.05.2007 17:30 schrieb Andreas Kretschmer:
> begin Jan Schmidt wrote:
>> Andreas Kretschmer writes:
>
>>> Andere RDBMS haben Schemas.
>
>> Nur zum Verständnis:
>
> Eigenpatsch: MySQL behandelt seine Datenbanken ähnlich wie PostgreSQL
> Schemas. Christian hat da völlig Recht, schaue seine Antwort für Deine
> Lösung.
>
> Btw.: in $anderes_system kann man via dbi-link auch Datenbanken auf
> unterschiedlichen Servern zusammen verknüpfern, wenn auch mit merklichen
> Schmerzen... und $anderes_system ist eine Menge größer 1, vermutlich
> enthält es auch MySQL.

Tut es. Federated DB.

Re: Frage zum DBI-Modul

am 09.05.2007 18:50:47 von Claus Reibenstein

Joachim Durchholz schrieb:

> Jan Schmidt schrieb:
>
>> [Ich kann] keine select-Anweisung bauen, die auf
>> verschiedene Datenbanken zugreift (jedenfalls ist mir das nicht
>> gelungen).
>>
>> Welche Möglichkeiten gibts dazu?
>
> Keine.

SELECT t1.blah, t2.blub
FROM db1.table1 t1, db2.table2 t2
WHERE t1.ping = t2.pong;

> Willst Du Daten verknüpfen, müssen sie in der gleichen Datenbank sein.

Seit wann?

Gruß. Claus

Re: Frage zum DBI-Modul

am 09.05.2007 18:50:47 von Claus Reibenstein

Joachim Durchholz schrieb:

> Jan Schmidt schrieb:
>
>> [Ich kann] keine select-Anweisung bauen, die auf
>> verschiedene Datenbanken zugreift (jedenfalls ist mir das nicht
>> gelungen).
>>
>> Welche Möglichkeiten gibts dazu?
>
> Keine.

SELECT t1.blah, t2.blub
FROM db1.table1 t1, db2.table2 t2
WHERE t1.ping = t2.pong;

> Willst Du Daten verknüpfen, müssen sie in der gleichen Datenbank sein.

Seit wann?

Gruß. Claus

Re: Frage zum DBI-Modul

am 09.05.2007 19:23:34 von Joachim Durchholz

Claus Reibenstein schrieb:
> Joachim Durchholz schrieb:
>
>> Jan Schmidt schrieb:
>>
>>> [Ich kann] keine select-Anweisung bauen, die auf
>>> verschiedene Datenbanken zugreift (jedenfalls ist mir das nicht
>>> gelungen).
>>>
>>> Welche Möglichkeiten gibts dazu?
>> Keine.
>
> SELECT t1.blah, t2.blub
> FROM db1.table1 t1, db2.table2 t2
> WHERE t1.ping = t2.pong;

Ach ja... völlig übersehen, diese Möglichkeit.
Sorry.

Re: Frage zum DBI-Modul

am 09.05.2007 19:23:34 von Joachim Durchholz

Claus Reibenstein schrieb:
> Joachim Durchholz schrieb:
>
>> Jan Schmidt schrieb:
>>
>>> [Ich kann] keine select-Anweisung bauen, die auf
>>> verschiedene Datenbanken zugreift (jedenfalls ist mir das nicht
>>> gelungen).
>>>
>>> Welche Möglichkeiten gibts dazu?
>> Keine.
>
> SELECT t1.blah, t2.blub
> FROM db1.table1 t1, db2.table2 t2
> WHERE t1.ping = t2.pong;

Ach ja... völlig übersehen, diese Möglichkeit.
Sorry.

Re: Frage zum DBI-Modul

am 09.05.2007 19:30:33 von Andreas Scherbaum

Joachim Durchholz wrote:
> Andreas Kretschmer schrieb:
>> create schema foo;
>>
>> Schemas sind dann eigenständige Namensräume, man kann denen auch Rechte
>> geben etc., man kann Suchpfade darauf setzen u.s.w.
>> Zugriff auf Tabellen in anderen Schemas erfolgen dann via schema.table
>> (falls kein search_path drauf ist bzw. andere Schemas im search_path
>> vorher stehen)
>> Kann aber MySQL IMHO derzeit nicht.
>
> Nö, kann es auch nicht. Sowas geht über den SQL-Standard hinaus.

Also in meiner Kopie von SQL1992 gibt es "CREATE SCHEMA" bereits, damit geht
das wohl nicht "über den Standard hinaus".


> Man muss das wohl auch mit dem Begriff etwas aufpassen. "Schema" ist
> eigentlich das Datenbankschema, also eine Liste aller Tabellen mit ihren
> Spaltenstrukturen und Relationen.

Wenn man bei Mysql alle Datenbanken zusammenfasst, wäre jede dieser
Datenbanken ein Schema, in jedem davon kann man eine Tabelle gleichen
Namens ablegen. Da Mysql so etwas nicht hat, gibt es dann Umwege wie
das man jeder Tabelle einer Applikation einen Prefix verpasst. Damit
kann man dann auch zwei Bildergallerien oder drei Blogs in einer Datenbank
betreiben, ohne jedesmal eine neue Datenbank anlegen zu müssen.


> Man muss also ein bisschen aufpassen, dass man nicht missverstanden wird,
> wenn man außerhalb der pgsql-Gemeine von einem "Schema" spricht.

Du meinst sicherlich: ausserhalb von Mysql ;-)


Bye

--
Andreas 'ads' Scherbaum
Failure is not an option. It comes bundled with your Microsoft product.
(Ferenc Mantfeld)

Re: Frage zum DBI-Modul

am 10.05.2007 07:32:36 von Jan Schmidt

Claus Reibenstein <4spammersonly@web.de> writes:

> Joachim Durchholz schrieb:
>
>> Jan Schmidt schrieb:
>>
>>> [Ich kann] keine select-Anweisung bauen, die auf
>>> verschiedene Datenbanken zugreift (jedenfalls ist mir das nicht
>>> gelungen).
>>>
>>> Welche Möglichkeiten gibts dazu?
>>
>> Keine.
>
> SELECT t1.blah, t2.blub
> FROM db1.table1 t1, db2.table2 t2
> WHERE t1.ping = t2.pong;

so wollte ich das eigentlich auch machen. Nur mit dem dbi-Modul gibts
Fehler.

DBD::mysql::st execute failed: Incorrect table name 'd2.table2' at dbtest.pm line x.

Bei der Erstellung des DB-Handles wird das scheinbar an eine Datenbank
gebunden. Und das dbi-Modul wacht darüber, daß keine andere DB
abgefragt wird.

Re: Frage zum DBI-Modul

am 10.05.2007 07:32:36 von Jan Schmidt

Claus Reibenstein <4spammersonly@web.de> writes:

> Joachim Durchholz schrieb:
>
>> Jan Schmidt schrieb:
>>
>>> [Ich kann] keine select-Anweisung bauen, die auf
>>> verschiedene Datenbanken zugreift (jedenfalls ist mir das nicht
>>> gelungen).
>>>
>>> Welche Möglichkeiten gibts dazu?
>>
>> Keine.
>
> SELECT t1.blah, t2.blub
> FROM db1.table1 t1, db2.table2 t2
> WHERE t1.ping = t2.pong;

so wollte ich das eigentlich auch machen. Nur mit dem dbi-Modul gibts
Fehler.

DBD::mysql::st execute failed: Incorrect table name 'd2.table2' at dbtest.pm line x.

Bei der Erstellung des DB-Handles wird das scheinbar an eine Datenbank
gebunden. Und das dbi-Modul wacht darüber, daß keine andere DB
abgefragt wird.

Re: Frage zum DBI-Modul

am 10.05.2007 09:20:33 von Claus Reibenstein

Jan Schmidt schrieb:

> Claus Reibenstein <4spammersonly@web.de> writes:
>
>> SELECT t1.blah, t2.blub
>> FROM db1.table1 t1, db2.table2 t2
>> WHERE t1.ping = t2.pong;
>
> so wollte ich das eigentlich auch machen. Nur mit dem dbi-Modul gibts
> Fehler.
>
> DBD::mysql::st execute failed: Incorrect table name 'd2.table2' at dbtest.pm line x.

Versuch's mal mit `d2`.`table2` (4 Backticks).

Gruß. Claus

Re: Frage zum DBI-Modul

am 10.05.2007 09:20:33 von Claus Reibenstein

Jan Schmidt schrieb:

> Claus Reibenstein <4spammersonly@web.de> writes:
>
>> SELECT t1.blah, t2.blub
>> FROM db1.table1 t1, db2.table2 t2
>> WHERE t1.ping = t2.pong;
>
> so wollte ich das eigentlich auch machen. Nur mit dem dbi-Modul gibts
> Fehler.
>
> DBD::mysql::st execute failed: Incorrect table name 'd2.table2' at dbtest.pm line x.

Versuch's mal mit `d2`.`table2` (4 Backticks).

Gruß. Claus

Re: Frage zum DBI-Modul

am 10.05.2007 09:33:49 von Jan Schmidt

Claus Reibenstein <4spammersonly@web.de> writes:

> Jan Schmidt schrieb:
>
>> Claus Reibenstein <4spammersonly@web.de> writes:
>>
>>> SELECT t1.blah, t2.blub
>>> FROM db1.table1 t1, db2.table2 t2
>>> WHERE t1.ping = t2.pong;
>>
>> so wollte ich das eigentlich auch machen. Nur mit dem dbi-Modul gibts
>> Fehler.
>>
>> DBD::mysql::st execute failed: Incorrect table name 'd2.table2' at dbtest.pm line x.
>
> Versuch's mal mit `d2`.`table2` (4 Backticks).

das half - da soll mal einer drauf kommen...

jan

Re: Frage zum DBI-Modul

am 10.05.2007 09:33:49 von Jan Schmidt

Claus Reibenstein <4spammersonly@web.de> writes:

> Jan Schmidt schrieb:
>
>> Claus Reibenstein <4spammersonly@web.de> writes:
>>
>>> SELECT t1.blah, t2.blub
>>> FROM db1.table1 t1, db2.table2 t2
>>> WHERE t1.ping = t2.pong;
>>
>> so wollte ich das eigentlich auch machen. Nur mit dem dbi-Modul gibts
>> Fehler.
>>
>> DBD::mysql::st execute failed: Incorrect table name 'd2.table2' at dbtest.pm line x.
>
> Versuch's mal mit `d2`.`table2` (4 Backticks).

das half - da soll mal einer drauf kommen...

jan

Re: Frage zum DBI-Modul

am 10.05.2007 09:46:17 von Claus Reibenstein

Jan Schmidt schrieb:

> Claus Reibenstein <4spammersonly@web.de> writes:
>
>> Versuch's mal mit `d2`.`table2` (4 Backticks).
>
> das half - da soll mal einer drauf kommen...

Ich hab's aus dem Manual :-)

Gruß. Claus

Re: Frage zum DBI-Modul

am 10.05.2007 09:46:17 von Claus Reibenstein

Jan Schmidt schrieb:

> Claus Reibenstein <4spammersonly@web.de> writes:
>
>> Versuch's mal mit `d2`.`table2` (4 Backticks).
>
> das half - da soll mal einer drauf kommen...

Ich hab's aus dem Manual :-)

Gruß. Claus

Re: Frage zum DBI-Modul

am 10.05.2007 10:44:41 von struebig

Jan Schmidt schrieb:
> Bei der Erstellung des DB-Handles wird das scheinbar an eine Datenbank
> gebunden. Und das dbi-Modul wacht darüber, daß keine andere DB
> abgefragt wird.

Es sieht so aus, dass du mit Datenbanken, die einzelnen Tabellen meinst?
Dies lassen sich natürlich innerhalb einer DB miteinander verknüpfen.

Struppi.

Re: Frage zum DBI-Modul

am 10.05.2007 12:54:02 von Frank Seitz

J. Strübig wrote:

> Es sieht so aus, dass du mit Datenbanken, die einzelnen Tabellen meinst?
> Dies lassen sich natürlich innerhalb einer DB miteinander verknüpfen.

Das Missverständnis ist, denke ich, dass das, was bei anderen
Relationalen Datenbanksystemen "Schema" heißt, bei MySQL "Datenbank" heißt.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Re: Frage zum DBI-Modul

am 10.05.2007 13:15:44 von Jan Schmidt

Frank Seitz writes:

> J. Strübig wrote:
>
>> Es sieht so aus, dass du mit Datenbanken, die einzelnen Tabellen meinst?
>> Dies lassen sich natürlich innerhalb einer DB miteinander verknüpfen.
>
> Das Missverständnis ist, denke ich, dass das, was bei anderen
> Relationalen Datenbanksystemen "Schema" heißt, bei MySQL "Datenbank" heißt.

das kann gut sein:

http://dev.mysql.com/doc/refman/5.1/de/create-database.html

CREATE SCHEMA ist ein Synonym für CREATE DATABASE