BUG #11875: char() not behaving as documented

Поиск
Список
Период
Сортировка
От b.wood@niwa.co.nz
Тема BUG #11875: char() not behaving as documented
Дата
Msg-id 20141104195517.26930.71023@wrigleys.postgresql.org
обсуждение исходный текст
Ответы Re: BUG #11875: char() not behaving as documented  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-bugs
The following bug has been logged on the website:

Bug reference:      11875
Logged by:          Brent Wood
Email address:      b.wood@niwa.co.nz
PostgreSQL version: 9.2.0
Operating system:   Linux
Description:

According to the docs
http://www.postgresql.org/docs/9.3/static/datatype-character.html)(:
" If the string to be stored is shorter than the declared length, values of
type character will be space-padded; values of type character varying will
simply store the shorter string."

Yet chars are not being padded, in fact they lose trailing spaces which are
retained by varchars. They also return length()'s less than the defined
length... which should not be the case for a padded string as defined in the
documentation.

fish=# create table test(var3 varchar(3),cha3 char(3));
CREATE TABLE
fish=# insert into test values('1','1');
INSERT 0 1
fish=# insert into test values('2 ','2 '); -- one space
INSERT 0 1
fish=# insert into test values('3  ','3  '); --two spaces
INSERT 0 1
fish=# select var3||':' as var3, cha3||':' as char3 from test;
 var3 | char3
------+-------
 1:   | 1:
 2 :  | 2:
 3  : | 3:
(3 rows)
test=# select length(var3) as v_lgth, length(cha3) as c_length from test;
 v_lgth | c_length
--------+----------
      1 |        1
      2 |        1
      3 |        1

So, in summary, varchar stores whatever feed to it and keeps trailing spaces
to max length, char type will trim off trailing spaces, and store a string
shorter than the specified length.

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

Предыдущее
От: Sven Wegener
Дата:
Сообщение: Re: [HACKERS] COPY TO returning empty result with parallel ALTER TABLE
Следующее
От: Andres Freund
Дата:
Сообщение: Re: [HACKERS] COPY TO returning empty result with parallel ALTER TABLE