Thread: bit-strings with white space

bit-strings with white space

From
PG Doc comments form
Date:
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

From
Tom Lane
Date:
=?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

From
Jim Nasby
Date:
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

From
"David G. Johnston"
Date:
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.