CHAR(n) always trims trailing spaces in 7.4

From: "news(dot)postgresql(dot)org" <jlim(at)natsoft(dot)com(dot)my>
To: pgsql-sql(at)postgresql(dot)org
Subject: CHAR(n) always trims trailing spaces in 7.4
Date: 2004-02-16 03:29:42
Message-ID: c0pdei$ho6$1@news.hub.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers pgsql-sql

Hello,

I just discovered the following change to CHAR(n) (taken from varlena.com,
general bits, issue 62).

This will cause me serious heart-ache, back-ache and bug-ache if we upgrade
to 7.4. Is there any compatibility flag available to use pre-7.4 behaviour
for CHAR(n)?

Regards, John

==================

In 7.4, one of the changes was that the char(n) type now truncates trailing
spaces. This causes a problem for those of us using ::char(n) to create
fixed length fields. Creating fixed length field batch files are usually
required to interface with legacy systems.

In the example below, psql is called from a shell with tuples only (t) and
unaligned (A). The result of the selection creates a fixed width file.

One of the techniques used to create fixed length fields in 7.3 and earlier
was to cast the value to char(n). This along with the various to_char()
functions used to be able to create fixed length records. For example:

% psql -At > batch.out << END
select accountid::char(30),
to_char( transaction_amount, 'FM000.00'),
(lastname || ',' || firstname )::char(40),
bankid::char(15),
to_char( now(), 'YYYYMMDD');
END
In 7.4 this no longer works. The fields created with the cast are no longer
fixed length. Instead of using the cast to make fixed length fields, use
rpad() and lpad() to do the same thing.
rpad(string text, length integer [, fill text])
lpad(string text, length integer [, fill text])
The previous selection should now be written as follows.

% psql -At > batch.out << END
select rpad(accountid,30),
to_char( transaction_amount, 'FM000.00'),
rpad( (lastname || ',' || firstname ), 40),
rpad(bankid, 15),
to_char( now(), 'YYYYMMDD');
END

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Teodor Sigaev 2004-02-16 09:59:31 Re: Concurrence GiST
Previous Message Christopher Kings-Lynne 2004-02-16 02:33:06 Re: Concurrence GiST

Browse pgsql-sql by date

  From Date Subject
Next Message Denis 2004-02-16 07:57:02 Re: ORDER BY TIMESTAMP_column ASC, NULL first
Previous Message Robert Treat 2004-02-16 02:45:15 Re: umlimited arguments on function