CHAR(n) always trims trailing spaces in 7.4

Поиск
Список
Период
Сортировка
От news.postgresql.org
Тема CHAR(n) always trims trailing spaces in 7.4
Дата
Msg-id c0pdei$ho6$1@news.hub.org
обсуждение исходный текст
Ответ на 7.4 - FK constraint performance  (ow <oneway_111@yahoo.com>)
Ответы Re: CHAR(n) always trims trailing spaces in 7.4  (Tom Lane <tgl@sss.pgh.pa.us>)
Список 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 << ENDselect 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 << ENDselect rpad(accountid,30),   to_char( transaction_amount, 'FM000.00'),   rpad( (lastname
||',' || firstname ), 40),   rpad(bankid, 15),   to_char( now(), 'YYYYMMDD');
 
END




В списке pgsql-sql по дате отправления:

Предыдущее
От: Josh Berkus
Дата:
Сообщение: Re: Tip: a function for creating a remote view using dblink
Следующее
От: "Sumita Biswas (sbiswas)"
Дата:
Сообщение: FW: Function