Обсуждение: creating table without columns
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
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 columnsbut table row count is 2.please give me clarity about this, i thought it may give syntax error but noteither it must have 2 rows data but both are not happened.with ins_test as (select 1 as srnounionselect 2)select into test from ins_test;select * from test;
See VALUES.
:)
-Greg
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
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
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