Thread: Problems with PostgreSQL DBI-Link / DBD-ODBC

Problems with PostgreSQL DBI-Link / DBD-ODBC

From
"Pit M."
Date:
I have the following problem with PostgreSQL and hope you guys can help
me out in this matter: I try to get a remote connection to any database
(e.g. MS-SQL or MS Access) using DBI-Link and DBD:ODBC. My problem is,
that everything seems fine so far, however I don't know how to use the
parameters for "make_accessor_functions()". I searched the net for it,
but can only find samples for Perl-Scripting, but I need a sample for
using it directly in SQL.

This is what I've come up so far. Hope you can point me to the right
direction.

SELECT make_accessor_functions(
     'dbi:ODBC:Northwind::dbi_link.data_source,
     'sa'::text,
     NULL::text,
     '---
AutoCommit: 1
RaiseError: 1
'::dbi_link.yaml,
     NULL::dbi_link.yaml,
     NULL::text,
     NULL, ::text,
     'Northwind'::text
);


I have a ODBC connection named "Northwind".

The error message I'm always receiving (for the MS-SQL sample) is:

ERROR: error from Perl function: error from Perl function: duplicate key
violates unique constraint "dbi_connection_data_source_key" at line 94.
at line 35.
SQL state: XX000

I'm using following components under Windows XP
postgresql-8.2.5-1
pgadmin3-1.8.0
DBI-1.59
dbi-link-2.0.0
DBD-ODBC-1.05

Thanks in advance.

Re: Problems with PostgreSQL DBI-Link / DBD-ODBC

From
David Fetter
Date:
On Mon, Oct 29, 2007 at 03:44:05PM +0100, Pit M. wrote:
> I have the following problem with PostgreSQL and hope you guys can
> help me out in this matter: I try to get a remote connection to any
> database (e.g. MS-SQL or MS Access) using DBI-Link and DBD:ODBC. My
> problem is, that everything seems fine so far, however I don't know
> how to use the parameters for "make_accessor_functions()". I
> searched the net for it, but can only find samples for
> Perl-Scripting, but I need a sample for using it directly in SQL.
>
> This is what I've come up so far. Hope you can point me to the right
> direction.
>
> SELECT make_accessor_functions(
>     'dbi:ODBC:Northwind::dbi_link.data_source,
>     'sa'::text,
>     NULL::text,
>     '---
> AutoCommit: 1
> RaiseError: 1
> '::dbi_link.yaml,
>     NULL::dbi_link.yaml,
>     NULL::text,
>     NULL, ::text,
>     'Northwind'::text
> );
>
>
> I have a ODBC connection named "Northwind".
>
> The error message I'm always receiving (for the MS-SQL sample) is:
>
> ERROR: error from Perl function: error from Perl function: duplicate key
> violates unique constraint "dbi_connection_data_source_key" at line 94.
> at line 35.
> SQL state: XX000

It looks like you're trying to connect the same data_source and
user_name twice.  Check whether the existing one works :)

Are the documents unclear on the idea that you only run
make_accessor_functions() once per remote (data_source,user_name)
pair per local database?

Cheers,
David.
--
David Fetter <david@fetter.org> http://fetter.org/
Phone: +1 415 235 3778  AIM: dfetter666  Yahoo!: dfetter
Skype: davidfetter      XMPP: david.fetter@gmail.com

Remember to vote!
Consider donating to Postgres: http://www.postgresql.org/about/donate

Re: Problems with PostgreSQL DBI-Link / DBD-ODBC

From
"Pit M."
Date:
Hi David!

Thanks for the fast reply. So you mean that I might already have created
a connection but am still trying to create the same one again?
 >>Check whether the existing one works :)
So how can I test it?

What is the correct way of accessing this data source in a select statement?

Concerning the documents, I wouldn't say that they are unclear about
make_accessor_functions(). The problem is, that in the dbi-link
documents (quote: "Do the following, with the appropriate parameters.
"Appropriate parameters" come from the perldoc of the appropriate
DBD...") and in the dbi-odbc documents I can't find any information
about the correct use of the parameters for the ODBC-connection. That's
why I tried to create the connection so many times.

Regards,

Pit


David Fetter wrote:
> On Mon, Oct 29, 2007 at 03:44:05PM +0100, Pit M. wrote:
>> I have the following problem with PostgreSQL and hope you guys can
>> help me out in this matter: I try to get a remote connection to any
>> database (e.g. MS-SQL or MS Access) using DBI-Link and DBD:ODBC. My
>> problem is, that everything seems fine so far, however I don't know
>> how to use the parameters for "make_accessor_functions()". I
>> searched the net for it, but can only find samples for
>> Perl-Scripting, but I need a sample for using it directly in SQL.
>>
>> This is what I've come up so far. Hope you can point me to the right
>> direction.
>>
>> SELECT make_accessor_functions(
>>     'dbi:ODBC:Northwind::dbi_link.data_source,
>>     'sa'::text,
>>     NULL::text,
>>     '---
>> AutoCommit: 1
>> RaiseError: 1
>> '::dbi_link.yaml,
>>     NULL::dbi_link.yaml,
>>     NULL::text,
>>     NULL, ::text,
>>     'Northwind'::text
>> );
>>
>>
>> I have a ODBC connection named "Northwind".
>>
>> The error message I'm always receiving (for the MS-SQL sample) is:
>>
>> ERROR: error from Perl function: error from Perl function: duplicate key
>> violates unique constraint "dbi_connection_data_source_key" at line 94.
>> at line 35.
>> SQL state: XX000
>
> It looks like you're trying to connect the same data_source and
> user_name twice.  Check whether the existing one works :)
>
> Are the documents unclear on the idea that you only run
> make_accessor_functions() once per remote (data_source,user_name)
> pair per local database?
>
> Cheers,
> David.

Re: Problems with PostgreSQL DBI-Link / DBD-ODBC

From
David Fetter
Date:
On Tue, Oct 30, 2007 at 01:12:41PM +0100, Pit M. wrote:
> Hi David!
>
> Thanks for the fast reply. So you mean that I might already have
> created a connection but am still trying to create the same one
> again?

Yes.

> >>Check whether the existing one works :)
> So how can I test it?

Fire up psql and do:

SELECT
    data_source_id,
    local_schema,
    data_source
FROM
    dbi_link.dbi_conection;

This gives you schemas you have created successfully.  You can then
check what's in schema foo by doing:

\dv foo.*

> What is the correct way of accessing this data source in a select
> statement?
>
> Concerning the documents, I wouldn't say that they are unclear about
> make_accessor_functions().  The problem is, that in the dbi-link
> documents (quote: "Do the following, with the appropriate
> parameters.  "Appropriate parameters" come from the perldoc of the
> appropriate DBD...") and in the dbi-odbc documents I can't find any
> information about the correct use of the parameters for the
> ODBC-connection. That's why I tried to create the connection so many
> times.

Ah, I see.  I don't have an example of dbd-odbc just yet, but you
should be able to write a very short perl program which connects to
your data source.

http://www.easysoft.com/developer/languages/perl/dbd_odbc_tutorial_part_1.html

Once you've verified that that's working, you can set up a new
connection.  The parameters you pass into $dbh coincide, not
coincidentally, with the first inputs to make_accessor_functions :)

Cheers,
David.
--
David Fetter <david@fetter.org> http://fetter.org/
Phone: +1 415 235 3778  AIM: dfetter666  Yahoo!: dfetter
Skype: davidfetter      XMPP: david.fetter@gmail.com

Remember to vote!
Consider donating to Postgres: http://www.postgresql.org/about/donate

Re: Problems with PostgreSQL DBI-Link / DBD-ODBC

From
"Pit M."
Date:
Hi David,

I'm sorry to bother you again, but I still couldn't get it to work. Like
you suggested, I checked for successfully installed schemas. There was
one, which I deleted again because I don't know which of my countless
tries to create it was the successful one. I think the following code
should be alright, however when executing it, I receive the following
error message:
"ERROR: error from Perl function: error from Perl function:
DBD::ODBC::db column_info failed: [Microsoft][ODBC SQL Server Driver]Die
Verbindung ist mit Ergebnissen von einem anderen hstmt belegt
(SQL-HY000)(DBD: odbc_columns/SQLColumns err=-1) at line 66. at line 53.
SQL state: XX000"

"Die Verbindung ist mit Ergebnissen von einem anderen hstmt belegt" is
German and means "The connection is occupied/reserved with results from
another hstmt". I'm desperately trying to solve it, but have no idea
where to start.

SELECT dbi_link.make_accessor_functions(
     'dbi:ODBC:test'::dbi_link.data_source,
     'sa'::text,
     ''::text,
     '---
AutoCommit: 1
RaiseError: 1
'::dbi_link.yaml,
     NULL::dbi_link.yaml,
     NULL::text,
     NULL::text,
     'test'::text
);

Hope you can help me one more time. Thanks.

Regards,

Pit


> On Tue, Oct 30, 2007 at 01:12:41PM +0100, Pit M. wrote:
>> Hi David!
>>
>> Thanks for the fast reply. So you mean that I might already have
>> created a connection but am still trying to create the same one
>> again?
>
> Yes.
>
>>>> Check whether the existing one works :)
>> So how can I test it?
>
> Fire up psql and do:
>
> SELECT
>     data_source_id,
>     local_schema,
>     data_source
> FROM
>     dbi_link.dbi_conection;
>
> This gives you schemas you have created successfully.  You can then
> check what's in schema foo by doing:
>
> \dv foo.*
>
>> What is the correct way of accessing this data source in a select
>> statement?
>>
>> Concerning the documents, I wouldn't say that they are unclear about
>> make_accessor_functions().  The problem is, that in the dbi-link
>> documents (quote: "Do the following, with the appropriate
>> parameters.  "Appropriate parameters" come from the perldoc of the
>> appropriate DBD...") and in the dbi-odbc documents I can't find any
>> information about the correct use of the parameters for the
>> ODBC-connection. That's why I tried to create the connection so many
>> times.
>
> Ah, I see.  I don't have an example of dbd-odbc just yet, but you
> should be able to write a very short perl program which connects to
> your data source.
>
> http://www.easysoft.com/developer/languages/perl/dbd_odbc_tutorial_part_1.html
>
> Once you've verified that that's working, you can set up a new
> connection.  The parameters you pass into $dbh coincide, not
> coincidentally, with the first inputs to make_accessor_functions :)
>
> Cheers,
> David.

Re: Problems with PostgreSQL DBI-Link / DBD-ODBC

From
David Fetter
Date:
On Mon, Nov 05, 2007 at 05:02:03PM +0100, Pit M. wrote:
> Hi David,
>
> I'm sorry to bother you again, but I still couldn't get it to work.
> Like you suggested, I checked for successfully installed schemas.
> There was one, which I deleted again because I don't know which of
> my countless tries to create it was the successful one.

Any one that got created successfully in a transaction is the
successful one.

Please start over by doing the following from within psql.

BEGIN;
DROP SCHEMA test CASCADE;
DROP SCHEMA dbi_link CASCADE;
\i dbi_link.sql
COMMIT;

If you see COMMIT after that, you have successfully loaded the
DBI-Link software into that database.  If you don't, let me know what
you did get.

After that, do the following, editing the file and repeating until you
get a COMMIT at the end.

BEGIN;
\i test.sql
COMMIT;

Cheers,
David.
--
David Fetter <david@fetter.org> http://fetter.org/
Phone: +1 415 235 3778  AIM: dfetter666  Yahoo!: dfetter
Skype: davidfetter      XMPP: david.fetter@gmail.com

Remember to vote!
Consider donating to Postgres: http://www.postgresql.org/about/donate