Estou tentando usar um CTE para inserir alguns dados aleatórios em uma tabela -
create table foo (id integer)
with x as (select random())
insert into foo (id)
select x from x
Isso dá um erro:
ERROR: column "id" is of type integer but expression is of type record
Apenas o CTE com select
funciona:
with x as (select random())
-- insert into foo (id)
select x from x
Também não consigo digitar:
with x as (select random())
insert into foo (id)
select x::integer from x
Isso dá um erro: ERROR: cannot cast type record to integer
.
O que está errado e como posso corrigir isso?
significa selecionar a linha inteira como coluna (observe os parênteses na saída, não o número puro). Valor semelhante do tipo composto.
Por exemplo,
Para obter o valor de uma função, você precisa acessar uma coluna específica, não a linha inteira.
você pode usar o valor em insert