Обсуждение: bit-strings with white space

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

bit-strings with white space

От
PG Doc comments form
Дата:
The following documentation comment has been logged on the website:

Page: https://www.postgresql.org/docs/9.6/static/sql-syntax-lexical.html
Description:

Postgresql 9.6, section 4.1.2.5 says that bit-strings can spill over
multiple lines, same as regular string constants. I tried SELECTing such and
found that they may only contain characters '0' and '1'.

Re: bit-strings with white space

От
Tom Lane
Дата:
=?utf-8?q?PG_Doc_comments_form?= <noreply@postgresql.org> writes:
> Postgresql 9.6, section 4.1.2.5 says that bit-strings can spill over
> multiple lines, same as regular string constants. I tried SELECTing such and
> found that they may only contain characters '0' and '1'.

As indeed the text says.  What the continuation mention is talking
about is this syntax:

regression=# select b'10001'
     '00100';
  ?column?  
------------
 1000100100
(1 row)

which works like

regression=# select 'foo'
   'bar';
 ?column? 
----------
 foobar
(1 row)

Perhaps there's something we could change to make this clearer,
but I'm not sure what.

            regards, tom lane


Re: bit-strings with white space

От
Jim Nasby
Дата:
On 4/22/18 12:18 PM, Tom Lane wrote:
> regression=# select 'foo'
>     'bar';
>   ?column?
> ----------
>   foobar
> (1 row)
> 
> Perhaps there's something we could change to make this clearer,
> but I'm not sure what.

I had no idea you could do that. While there's probably some wordy 
description that could explain this, I think an example is probably the 
best bet. Are there any other data types that work like this?
-- 
Jim C. Nasby, Data Architect                       jim@nasby.net
512.569.9461 (cell)                         http://jim.nasby.net


Re: bit-strings with white space

От
"David G. Johnston"
Дата:
On Sunday, April 22, 2018, Jim Nasby <jim@nasby.net> wrote:
On 4/22/18 12:18 PM, Tom Lane wrote:
regression=# select 'foo'
    'bar';
  ?column?
----------
  foobar
(1 row)

Perhaps there's something we could change to make this clearer,
but I'm not sure what.

I had no idea you could do that. While there's probably some wordy description that could explain this, I think an example is probably the best bet. Are there any other data types that work like this?


This structural "normalization" gets applied before types get involved.  Two literals only separated by a newline are concatenated together.  Any type name prefix, E or b prefix, :: cast, or cast() application then gets applied to the combined literal.

The sql syntax section on this could maybe use another example or two but does communicate the behavior reasonably well.


David J.