Обсуждение: creating table without columns

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

creating table without columns

От
Subodh Kumar
Дата:
Hello Everyone,
           I have run below query it is created 'test' table without columns 
           but table row count is 2. 
please give me clarity about this, i thought it may give syntax error but not
either it must have 2 rows data but both are not happened.


with ins_test as (select 1 as srno
union
select 2)
select into test from ins_test;

select * from test;

thank you.

Regards:
Subodh Kumar
Postgresql Developer

Re: creating table without columns

От
Greg Spiegelberg
Дата:
On Tue, Oct 30, 2018, 6:45 AM Subodh Kumar <subodh.kumar@epps-erp.com> wrote:
Hello Everyone,
           I have run below query it is created 'test' table without columns 
           but table row count is 2. 
please give me clarity about this, i thought it may give syntax error but not
either it must have 2 rows data but both are not happened.


with ins_test as (select 1 as srno
union
select 2)
select into test from ins_test;

select * from test;

See VALUES. 
:)

-Greg

Re: creating table without columns

От
Christoph Berg
Дата:
Re: Subodh Kumar 2018-10-30 <CA+KMk93CwQBP8SMeu_wcGdrj_ZTLVQVDpL-zbCd2vdy0hfWYrw@mail.gmail.com>
> Hello Everyone,
>            I have run below query it is created 'test' table without
> columns
>            but table row count is 2.
> please give me clarity about this, i thought it may give syntax error but
> not
> either it must have 2 rows data but both are not happened.
> 
> 
> with ins_test as (select 1 as srno
> union
> select 2)
> select into test from ins_test;

You missed "srno":

with ins_test as (select 1 as srno
union
select 2)
select srno into test from ins_test;
       ^^^^

You can also "select from tbl;" -- omitting the target list.

The easier way to get a table without columns, but with rows is this:

create table test();
insert into test default values;
insert into test default values;

Christoph


Re: creating table without columns

От
Tom Lane
Дата:
Subodh Kumar <subodh.kumar@epps-erp.com> writes:
> I have run below query it is created 'test' table without columns
> but table row count is 2.
> please give me clarity about this, i thought it may give syntax error but
> not
> either it must have 2 rows data but both are not happened.

> with ins_test as (select 1 as srno
> union
> select 2)
> select into test from ins_test;

I think you meant to write

with ins_test as (select 1 as srno
union
select 2)
select * into test from ins_test;

or possibly

with ins_test as (select 1 as srno
union
select 2)
select srno into test from ins_test;

What you did write has no columns in the SELECT result clause,
so the INTO creates a table of no columns --- but you get
the expected number of rows.

Postgres allows zero-column tables, and zero-column selects,
because otherwise there are too many weird corner cases;
for instance ALTER TABLE DROP COLUMN would have to reject
dropping the last column.  The SQL standard has a different
opinion about which way is less ugly ...

            regards, tom lane


Re: creating table without columns

От
Subodh Kumar
Дата:
Thanks for quick response.

On Tue, Oct 30, 2018 at 6:42 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
Subodh Kumar <subodh.kumar@epps-erp.com> writes:
> I have run below query it is created 'test' table without columns
> but table row count is 2.
> please give me clarity about this, i thought it may give syntax error but
> not
> either it must have 2 rows data but both are not happened.

> with ins_test as (select 1 as srno
> union
> select 2)
> select into test from ins_test;

I think you meant to write

with ins_test as (select 1 as srno
union
select 2)
select * into test from ins_test;

or possibly

with ins_test as (select 1 as srno
union
select 2)
select srno into test from ins_test;

What you did write has no columns in the SELECT result clause,
so the INTO creates a table of no columns --- but you get
the expected number of rows.

Postgres allows zero-column tables, and zero-column selects,
because otherwise there are too many weird corner cases;
for instance ALTER TABLE DROP COLUMN would have to reject
dropping the last column.  The SQL standard has a different
opinion about which way is less ugly ...

                        regards, tom lane