안녕하세요.
명시적인 형변환자들 (::bigint,::abstime ::text) 등등 여러가지가 있던데 목록과 정보를 어디가면 찾을수 있을지요?
좋은 정보 미리 감사 드립니다.
도움이 될지는 모르겠지만,
시스템 카탈로그 테이블인 pg_cast 테이블의 설명으로 대신 하면 될 듯합니다.
ioseph=> select b.typname as source,c.typname as target, d.proname, a.castcontext from pg_cast a, pg_type b, pg_type c, pg_proc d where a.castsource = b.oid and a.casttarget = c.oid and a.castfunc = d.oid order by 1; source | target | proname | castcontext ---------------+---------------+-------------+------------- abstime | timestamptz | timestamptz | i abstime | date | date | a abstime | time | time | a abstime | timestamp | timestamp | i bit | bit | bit | i bit | int4 | int4 | e bit | int8 | int8 | e bool | text | text | a bool | bpchar | text | a bool | varchar | text | a bool | int4 | int4 | e box | lseg | lseg | e box | point | point | e box | circle | circle | e box | polygon | polygon | a bpchar | bpchar | bpchar | i bpchar | char | char | a bpchar | name | name | i bpchar | varchar | text | i bpchar | text | text | i bpchar | xml | xml | e char | bpchar | bpchar | a char | varchar | text | a char | int4 | int4 | e char | text | text | i cidr | bpchar | text | a cidr | varchar | text | a cidr | text | text | a circle | point | point | e circle | box | box | e circle | polygon | polygon | e date | timestamp | timestamp | i date | timestamptz | timestamptz | i float4 | float8 | float8 | i float4 | int4 | int4 | a float4 | int2 | int2 | a float4 | int8 | int8 | a float4 | numeric | numeric | a float8 | int8 | int8 | a float8 | numeric | numeric | a float8 | int4 | int4 | a float8 | int2 | int2 | a float8 | float4 | float4 | a inet | text | text | a inet | cidr | cidr | a inet | bpchar | text | a inet | varchar | text | a int2 | regclass | int4 | i int2 | int8 | int8 | i int2 | oid | int4 | i int2 | int4 | int4 | i int2 | regproc | int4 | i int2 | float4 | float4 | i int2 | regprocedure | int4 | i int2 | float8 | float8 | i int2 | regoper | int4 | i int2 | numeric | numeric | i int2 | regoperator | int4 | i int2 | regtype | int4 | i int2 | regconfig | int4 | i int2 | regdictionary | int4 | i int4 | bit | bit | e int4 | numeric | numeric | i int4 | float8 | float8 | i int4 | float4 | float4 | i int4 | char | char | e int4 | int2 | int2 | a int4 | int8 | int8 | i int4 | bool | bool | e int8 | int2 | int2 | a int8 | int4 | int4 | a int8 | float4 | float4 | i int8 | float8 | float8 | i int8 | numeric | numeric | i int8 | oid | oid | i int8 | regproc | oid | i int8 | regprocedure | oid | i int8 | regoper | oid | i int8 | regoperator | oid | i int8 | regclass | oid | i int8 | regtype | oid | i int8 | regconfig | oid | i int8 | regdictionary | oid | i int8 | bit | bit | e interval | reltime | reltime | a interval | interval | interval | i interval | time | time | a lseg | point | point | e name | text | text | i name | varchar | varchar | a name | bpchar | bpchar | a numeric | int8 | int8 | a numeric | float8 | float8 | i numeric | float4 | float4 | i numeric | numeric | numeric | i numeric | int4 | int4 | a numeric | int2 | int2 | a oid | int8 | int8 | a path | polygon | polygon | a path | point | point | e polygon | circle | circle | e polygon | point | point | e polygon | path | path | a polygon | box | box | e regclass | int8 | int8 | a regconfig | int8 | int8 | a regdictionary | int8 | int8 | a regoper | int8 | int8 | a regoperator | int8 | int8 | a regproc | int8 | int8 | a regprocedure | int8 | int8 | a regtype | int8 | int8 | a reltime | interval | interval | i text | name | name | i text | regclass | regclass | i text | char | char | a text | xml | xml | e time | interval | interval | i time | timetz | timetz | i time | time | time | i timestamp | timestamp | timestamp | i timestamp | timestamptz | timestamptz | i timestamp | time | time | a timestamp | date | date | a timestamp | abstime | abstime | a timestamptz | abstime | abstime | a timestamptz | timetz | timetz | a timestamptz | timestamp | timestamp | a timestamptz | time | time | a timestamptz | date | date | a timestamptz | timestamptz | timestamptz | i timetz | time | time | a timetz | timetz | timetz | i varbit | varbit | varbit | i varchar | name | name | i varchar | regclass | regclass | i varchar | varchar | varchar | i varchar | xml | xml | e varchar | char | char | a (139 rows) Time: 3.058 ms
이렇게 형 변환자를 사용할 수 있다고 하네요.
맨 끝 칼럼은 그 형변환의 종류입니다.
e 경우는 의도하는 자료형으로 변환하려면, 형 변환을 지정해야하고,
(예, '<a>asdf</a>'::xml)
a 경우는 비교 대상이 되는 칼럼의 자료형에 맞춰 자동으로 형 변환을 하고,
i 경우는 a 보다 더 자유롭게 표현식 안에서도 자동 변환 합니다.
즉, 'e' 경우만 기억하고 있던가, 'e' 경우만 쿼리해서 필요할 때마다 참조 하면 되겠죠.
-------------
그런데,
'1111'::numeric = '1111'::int4
이 경우, PostgreSQL에서는 과연 어느쪽으로 형 변환을 할지 저도 모릅니다.
혹 아시는 분 있으면 알려주시면 고맙겠네요.