SELECT #
As regras fornecidas nas seções anteriores resultam na atribuição de
tipos de dados diferentes de unknown a todas as expressões
em uma consulta SQL, exceto para literais de
tipo de dados não especificado que aparecem como colunas de saída
simples de uma instrução SELECT. Por exemplo, em
SELECT 'Hello World';
não há nada que permita identificar qual tipo de dados o literal
cadeia de caracteres deve assumir.
Nesta situação, o PostgreSQL voltará a
resolver o tipo de dados do literal como text.
Quando o comando SELECT é um braço de uma construção
UNION (ou INTERSECT ou
EXCEPT), ou quando aparece dentro de
INSERT ... SELECT, esta regra não é aplicada, uma vez
que as regras fornecidas nas seções anteriores têm precedência.
O tipo de dados de um literal de tipo de dados não especificado pode
ser obtido do outro braço do UNION no primeiro caso,
ou da coluna de destino no segundo caso.
As listas da cláusula RETURNING são tratadas da mesma
maneira que as listas de saída do comando SELECT para
esta finalidade.
Antes do PostgreSQL 10 esta regra não
existia, e os literais de tipo de dados não especificado em uma lista
de saída SELECT eram deixados como sendo do
tipo de dados unknown.
Isto teve várias consequências ruins, então foi mudado.