Question about how to handle numeric (decimal) data types while using libpq

Started by Sudheer H Ralmost 5 years ago4 messagesgeneral
Jump to latest
#1Sudheer H R
sudheer.hr@tekenlight.com

Hello,

I am trying to use libpq for interfacing with PostgreSQL from a C/C++ based application.

I have tried to use binary format of data for both sending and receiving data to and from server (resultFormat = 1).

As I understand most binary types, int, float etc… are encoded in bing-endian byte order and they can be converted to appropriate host specific memory representations.

However NUMERIC datatype is a more complex structure with multiple ints and pointers.

I would like to know if there are published library functions that convert (to and from) NUMERIC field to say, long double datatype

Any pointers in this regard is appreciated.

Regards,
Sudheer

#2Dmitriy Igrishin
dmitigr@gmail.com
In reply to: Sudheer H R (#1)
Re: Question about how to handle numeric (decimal) data types while using libpq

On Tue, Jul 6, 2021, 14:04 Sudheer H R <sudheer.hr@tekenlight.com> wrote:

Hello,

I am trying to use libpq for interfacing with PostgreSQL from a C/C++
based application.

I have tried to use binary format of data for both sending and receiving
data to and from server (resultFormat = 1).

As I understand most binary types, int, float etc… are encoded in
bing-endian byte order and they can be converted to appropriate host
specific memory representations.

However NUMERIC datatype is a more complex structure with multiple ints
and pointers.

I would like to know if there are published library functions that convert
(to and from) NUMERIC field to say, long double datatype

Any pointers in this regard is appreciated.

Why not just use text format for NUMERIC?

Show quoted text
#3Sudheer H R
sudheer.hr@tekenlight.com
In reply to: Dmitriy Igrishin (#2)
Re: Question about how to handle numeric (decimal) data types while using libpq

It is not possible to use binary for some fields and text for some fields.

If text format has to be used, it will be applicable for all fields.

And this method involved converting to string format (sprint) on the server side and binary format from string (equivalent of sscanf), which is costly.

Show quoted text

On 06-Jul-2021, at 5:18 PM, Dmitry Igrishin <dmitigr@gmail.com> wrote:

On Tue, Jul 6, 2021, 14:04 Sudheer H R <sudheer.hr@tekenlight.com <mailto:sudheer.hr@tekenlight.com>> wrote:
Hello,

I am trying to use libpq for interfacing with PostgreSQL from a C/C++ based application.

I have tried to use binary format of data for both sending and receiving data to and from server (resultFormat = 1).

As I understand most binary types, int, float etc… are encoded in bing-endian byte order and they can be converted to appropriate host specific memory representations.

However NUMERIC datatype is a more complex structure with multiple ints and pointers.

I would like to know if there are published library functions that convert (to and from) NUMERIC field to say, long double datatype

Any pointers in this regard is appreciated.
Why not just use text format for NUMERIC?

#4Peter Eisentraut
peter_e@gmx.net
In reply to: Sudheer H R (#1)
Re: Question about how to handle numeric (decimal) data types while using libpq

On 06.07.21 13:04, Sudheer H R wrote:

I am trying to use libpq for interfacing with PostgreSQL from a C/C++ based application.

I have tried to use binary format of data for both sending and receiving data to and from server (resultFormat = 1).

As I understand most binary types, int, float etc… are encoded in bing-endian byte order and they can be converted to appropriate host specific memory representations.

However NUMERIC datatype is a more complex structure with multiple ints and pointers.

I would like to know if there are published library functions that convert (to and from) NUMERIC field to say, long double datatype

There is a third-party library called libpqtypes out there that adds
support for handling specific types on the libpq side. But I'm not sure
how up to date it is.