Обсуждение: Datatype misrepresentation DTS with SQL Server

Поиск
Список
Период
Сортировка

Datatype misrepresentation DTS with SQL Server

От
"Matt Wedgwood"
Дата:

(I sincerely apologize if this is has been covered here - I didn't have much luck searching the archives)

I'm trying to use the "Import and Export Data" (DTS) tool included with MS SQL Server to push data to a PostgreSQL 7.1.3 database via an ODBC connection. Everything works great, except if I try to use the bigint/int8 data type for columns on the PostgreSQL side. DTS incorrectly sees the int8 datatype as "char" and therefore ties to shove a space-padded representation of the integer into the table. PostgreSQL doesn't like it.

The integer/int4 datatype doesn't cause this problem, but I will be inserting more rows than the int4 datatype can count (I want a bigint primary key).

I don't know any way around this problem, and DTS is kind of a requirement for the project.

Thanks in advance for any help you can provide.

-MW

Re: Datatype misrepresentation DTS with SQL Server

От
Tom Lane
Дата:
"Matt Wedgwood" <mwedgwood@TONYSANCHEZ.com> writes:
> I'm trying to use the "Import and Export Data" (DTS) tool included with
> MS SQL Server to push data to a PostgreSQL 7.1.3 database via an ODBC
> connection. Everything works great, except if I try to use the
> bigint/int8 data type for columns on the PostgreSQL side. DTS
> incorrectly sees the int8 datatype as "char" and therefore ties to shove
> a space-padded representation of the integer into the table.

You could try hacking the source code of the PG ODBC driver.  I note
this in pgtypes.c:

            /* Change this to SQL_BIGINT for ODBC v3 bjm 2001-01-23 */
        case PG_TYPE_INT8:
            return SQL_CHAR;

Don't know whether DTS will actually recognize SQL_BIGINT, but it's
worth a try.  SQL_NUMERIC could be worth trying too, if BIGINT fails.

            regards, tom lane

Re: Datatype misrepresentation DTS with SQL Server

От
"Matt Wedgwood"
Дата:
Thanks, Tom. That looks promising, but unfortunately I don't have the
tools to recompile. I guess there's no magic configuration file that
would allow me to override this built-in type-mapping, eh?

Any chance someone else has run into this problem found a workaround
that doesn't involve customizing the code? I'd be satisfied with
something kludgy, as long as it could be reliably automated. <g>

-MW

-----Original Message-----
From: Tom Lane [mailto:tgl@sss.pgh.pa.us]
Sent: Friday, February 08, 2002 1:08 PM
To: Matt Wedgwood
Cc: pgsql-odbc@postgresql.org
Subject: Re: [ODBC] Datatype misrepresentation DTS with SQL Server


"Matt Wedgwood" <mwedgwood@TONYSANCHEZ.com> writes:
> I'm trying to use the "Import and Export Data" (DTS) tool included
> with MS SQL Server to push data to a PostgreSQL 7.1.3 database via an
> ODBC connection. Everything works great, except if I try to use the
> bigint/int8 data type for columns on the PostgreSQL side. DTS
> incorrectly sees the int8 datatype as "char" and therefore ties to
> shove a space-padded representation of the integer into the table.

You could try hacking the source code of the PG ODBC driver.  I note
this in pgtypes.c:

            /* Change this to SQL_BIGINT for ODBC v3 bjm 2001-01-23 */
        case PG_TYPE_INT8:
            return SQL_CHAR;

Don't know whether DTS will actually recognize SQL_BIGINT, but it's
worth a try.  SQL_NUMERIC could be worth trying too, if BIGINT fails.

            regards, tom lane

Re: Datatype misrepresentation DTS with SQL Server

От
Dave Page
Дата:

> -----Original Message-----
> From: Matt Wedgwood [mailto:mwedgwood@TONYSANCHEZ.com]
> Sent: 08 February 2002 20:02
> To: Tom Lane
> Cc: pgsql-odbc@postgresql.org
> Subject: Re: [ODBC] Datatype misrepresentation DTS with SQL Server
>
>
> Thanks, Tom. That looks promising, but unfortunately I don't
> have the tools to recompile. I guess there's no magic
> configuration file that would allow me to override this
> built-in type-mapping, eh?
>
> Any chance someone else has run into this problem found a
> workaround that doesn't involve customizing the code? I'd be
> satisfied with something kludgy, as long as it could be
> reliably automated. <g>
>

Hacked version sent privately for testing... If it works I'll add a note to
the ODBC website about it.

Regards, Dave.

Re: Datatype misrepresentation DTS with SQL Server

От
Dave Page
Дата:

> -----Original Message-----
> From: Tom Lane [mailto:tgl@sss.pgh.pa.us]
> Sent: 08 February 2002 19:08
> To: Matt Wedgwood
> Cc: pgsql-odbc@postgresql.org
> Subject: Re: [ODBC] Datatype misrepresentation DTS with SQL Server
>
>
> "Matt Wedgwood" <mwedgwood@TONYSANCHEZ.com> writes:
> > I'm trying to use the "Import and Export Data" (DTS) tool included
> > with MS SQL Server to push data to a PostgreSQL 7.1.3
> database via an
> > ODBC connection. Everything works great, except if I try to use the
> > bigint/int8 data type for columns on the PostgreSQL side. DTS
> > incorrectly sees the int8 datatype as "char" and therefore ties to
> > shove a space-padded representation of the integer into the table.
>
> You could try hacking the source code of the PG ODBC driver.
> I note this in pgtypes.c:
>
>             /* Change this to SQL_BIGINT for ODBC v3 bjm 2001-01-23 */
>         case PG_TYPE_INT8:
>             return SQL_CHAR;
>
> Don't know whether DTS will actually recognize SQL_BIGINT,
> but it's worth a try.  SQL_NUMERIC could be worth trying too,
> if BIGINT fails.

We discussed this in some detail last year - Bruce's comment (and the code)
is technically correct. Int8 should return SQL_CHAR for ODBC < v3 and
SQL_BIGINT for >= v3.

My guess is that DTS is assuming that the driver is v3 compliant, at least
wrt the datatypes. As Tom suggests, try changing the driver to return
SQL_BIGINT, thought this will definitely break other int8/bigint code based
on MS ADO (including pgAdmin if you use it) - not a major issue if you don't
have any!

Regards, Dave.

Re: Datatype misrepresentation DTS with SQL Server

От
"Matt Wedgwood"
Дата:
The code change (SQL_CHAR -> SQL_BIGINT) worked! Thanks for the help.

-MW

-----Original Message-----
From: Dave Page [mailto:dpage@vale-housing.co.uk]
Sent: Saturday, February 09, 2002 5:14 AM
To: Matt Wedgwood; Tom Lane
Cc: pgsql-odbc@postgresql.org
Subject: RE: [ODBC] Datatype misrepresentation DTS with SQL Server




> -----Original Message-----
> From: Matt Wedgwood [mailto:mwedgwood@TONYSANCHEZ.com]
> Sent: 08 February 2002 20:02
> To: Tom Lane
> Cc: pgsql-odbc@postgresql.org
> Subject: Re: [ODBC] Datatype misrepresentation DTS with SQL Server
>
>
> Thanks, Tom. That looks promising, but unfortunately I don't
> have the tools to recompile. I guess there's no magic
> configuration file that would allow me to override this
> built-in type-mapping, eh?
>
> Any chance someone else has run into this problem found a
> workaround that doesn't involve customizing the code? I'd be
> satisfied with something kludgy, as long as it could be
> reliably automated. <g>
>

Hacked version sent privately for testing... If it works I'll add a note
to
the ODBC website about it.

Regards, Dave.