Pseudo-Types
PostgreSQL 의 자료형에는 몇가지 특별한 목적을 가지는 자료형이 존재 하는 이들을 통틀어서 pseudo-types 이라고 부른다. pseudo- 라는 접미어는 '가짜'라는 뜻을 의미한다. 즉 실제로 DB 내에서 테이블 정의시 자료형으로서 사용할 수는 없고, 단순히 특정한 의미를 가지는 자료형이라는 뜻으로서 pseudo-type 이라고 일컫는다.
Pseudo-type column data type 으로 사용될수는 없다. 그러나 함수의 인자의 자료형이나 또는 result type 으로서 사용될 수 있다. 각각의 pseudo-types 들은 단순한 SQL data type 을 도려 받는 단순한 함수가 아닌경우에 아주 유용하다. Table 8-20 에 이용가능한 pseudo-types 들을 설명하고 있다.
Table 8-20. Pseudo-Types
Name |
Description |
any |
input data type 이 어떤 자료형이던 상관이 없다는 것을 의미. |
anyarray |
함수의 자료형이 임의의 array data type 임을 의미 (see Section 33.2.5). |
anyelement |
함수가 임의의 data type 을 받아 들인다는 의미 (see Section 33.2.5). |
cstring |
함수가 null-terminated C string 을 인자로 받고 돌려 준다는 의미. |
internal |
함수가 server-internal data type 을 인자로 받는다는 것을 의미. |
language_handler |
Procedural language call handler 를 선언하고 language_handler 돌려 준다는 것을 의미. |
record |
함수가 지정되지 않은 row type 을 돌려 준다는 것을 의미 |
trigger |
Trigger function 가 trigger 를 돌려 준다는 것을 의미. |
void |
함수 값을 돌려 주지 않는 다는 것을 의미. |
opaque |
An obsolete type name that formerly served all the above purposes. |
C 로 작성된 함수 (내장(built-in) 이든지 또는 동적으로 오려진 (dynamically loaded) 것이든지) 들은 이들 pseudo-data types 들을 받아 들이고 돌려 주도록 선언한다. 작성자는 함수의 인자형으로서 pseudo-type 을 사용할 경우 함수가 안전하게 동작할 수 있도록 작성 해야 한다.
Procedural languages 로서 작성된 함수가 pseudo-types 을 사용할 경우에는 오로지 구현된 언어에서 허용하는 경우에만 이용가능 하다. 현재 procedural languages 는 함수의 인자형으로서 pseudo-type 의 사용을 금지하고 있다. 그리고 result type으로서 void 와 record 형만을 허용한다. (추가적으로 함수가 trigger 로서 이용되는 경우 trigger 형을 허용한다.) 어떤 경우에는 anyarray 과 anyelement 자료형을 이용하여 다양성을 가진 함수 (polymorphic functions) 를 만들 수도 있다.
Pseudo-type 중 internal 자료형은 DBMS 에 의해서 오로지 내부적으로만 사용됨을 의미하며, 또한 SQL query 에 의해서 직접적으로 사용될 수 없는 함수임을 의미한다.
만약 함수가 최소한 하나 이상의 internal-type argument 를 가질 경우 SQL로 부터 직접적으로 호출될 수 없다. 이러한 형안전성에 대한 제한(type safety of this restriction)을 유지할려면, 다음과 같은 coding rule을 따른 것이 중요하다:
최소한 하나이상의 internal argument 를 가지기 전에는, 어떤 함수에서라도 internal type 을 돌려 주도록 선언하지 말아라. |