Conversão de tipo de dados definida pelo usuário
Descrição
Existem três modos de conversão de tipos de dados para o PostgreSQL: conversão implícita, conversão de atribuição e conversão explícita. Eles correspondem a i (implícita), a (atribuição) e e (explícita) no catálogo do sistema pg_cast.
- Conversão implícita: uma conversão de bytes baixos para bytes altos do mesmo tipo de dados, por exemplo, de int para bigint
- Conversão de atribuição: uma conversão de bytes altos para bytes baixos do mesmo tipo de dados, por exemplo, de smallint para int
- Conversão explícita: uma conversão entre diferentes tipos de dados
Como usar
- Antes de converter tipos de dados, você pode executar o seguinte comando para verificar se o RDS for PostgreSQL suporta a conversão de tipos de dados:
select * from pg_catalog.pg_cast ; oid | castsource | casttarget | castfunc | castcontext | castmethod -------+------------+------------+----------+-------------+------------ 11277 | 20 | 21 | 714 | a | f 11278 | 20 | 23 | 480 | a | f 11279 | 20 | 700 | 652 | i | f 11280 | 20 | 701 | 482 | i | f ......
- Execute o seguinte comando para verificar se int4 pode ser convertido em text:
select * from pg_catalog.pg_cast where castsource = 'int4'::regtype and casttarget = 'bool'::regtype; oid | castsource | casttarget | castfunc | castcontext | castmethod -------+------------+------------+----------+-------------+------------ 11311 | 23 | 16 | 2557 | e | f (1 row)
A conversão é suportada e o tipo de conversão é conversão implícita.
Se nenhuma função de conversão interna estiver disponível, personalize uma função de conversão para suportar a conversão. Para mais detalhes, consulte Conversão de tipo de dados definida pelo usuário.
Conversão de tipo de dados definida pelo usuário
- Use dois pontos duplos (::) para realizar uma conversão forçada.
select '10'::int,'2023-10-05'::date; int4 | date ------+------------ 10 | 2023-10-05 (1 row)
- Use a função CAST para converter o tipo.
select CAST('10' as int),CAST('2023-10-05' as date); int4 | date ------+------------ 10 | 2023-10-05 (1 row)
- Personalize uma conversão de tipo de dados.
Para obter detalhes, consulte https://www.postgresql.org/docs/14/sql-createcast.html.
A adição de uma conversão de tipo personalizada afetará os planos de execução existentes do RDS for PostgreSQL. Portanto, a personalização de conversões de tipo não é recomendada.
- Conversão entre tempo e tipos de caracteres
- Conversão entre tipos booleanos e tipos numéricos
- Conversão entre tipos numéricos e tipos de caracteres
Exemplo: converter text em date.
create or replace function public.text_to_date(text) returns date as $$ select to_date($1,'yyyy-mm-dd'); $$ language sql strict; create cast (text as date) with function public.text_to_date(text) as implicit; select text '2023-09-09' + 1; ?column? ------------ 2023-09-10 (1 row)