{"Entry":{"collection":"type","key":"opaque","name":"opaque","aliases":[],"metadata":{"aliases":[],"category":"Pseudo-types","content_hash":"9e7f51876ae49a452737e9c454afa02bddc65b91c03331a26c7257df6c782cc0","imported_at":"2026-09-30T00:40:36.315612+08:00","name":"opaque","name_zh":"","slug":"opaque","summary":"An obsolete type name that formerly served many of the above purposes."}},"Definition":{"Collection":"type","Key":"opaque","SourceDatabase":"center","Version":"12","SourceTable":"data_type","SourceKey":"opaque","SourceRevision":"8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b","Facts":{"aliases":[],"casts":[],"catalog":{"array_type_name":"","array_type_oid":"0","descr":"obsolete, deprecated pseudo-type","oid":"2282","typacl":"_null_","typalign":"i","typanalyze":"-","typarray":"0","typbasetype":"0","typbyval":"t","typcategory":"P","typcollation":"0","typdefault":"_null_","typdefaultbin":"_null_","typdelim":"','","typelem":"0","typinput":"opaque_in","typisdefined":"t","typispreferred":"f","typlen":"4","typmodin":"-","typmodout":"-","typname":"opaque","typnamespace":"PGNSP","typndims":"0","typnotnull":"f","typoutput":"opaque_out","typowner":"PGUID","typreceive":"-","typrelid":"0","typsend":"-","typstorage":"p","typtype":"p","typtypmod":"-1"},"comparison_data":{"aliases":[],"casts":[],"catalog":{"array_type_name":"","typacl":"_null_","typalign":"i","typanalyze":"-","typarray":"","typbasetype":"0","typbyval":"t","typcategory":"P","typcollation":"0","typdefault":"_null_","typdefaultbin":"_null_","typdelim":",","typelem":"0","typinput":"opaque_in","typisdefined":"t","typispreferred":"f","typlen":"4","typmodin":"-","typmodout":"-","typname":"opaque","typndims":"0","typnotnull":"f","typoutput":"opaque_out","typreceive":"-","typrelid":"0","typsend":"-","typstorage":"p","typtype":"p","typtypmod":"-1"},"facts":[{"label":"Catalog name","value":"pg_catalog.opaque"},{"label":"Declared length","value":"4 bytes"},{"label":"Documented declaration","value":"opaque"},{"label":"Input function","value":"opaque_in"},{"label":"Output function","value":"opaque_out"},{"label":"Storage strategy","value":"plain"},{"label":"Type OID","value":"2282"},{"label":"Type kind","value":"Pseudo-type"}],"operator_classes":[],"operators":[],"ranges":[]},"comparison_hash":"00c98c1dd5b7f77890e5e08f010ef6e6cf26fb37dffc139e812afd9c9453eedd","coverage":"source inventory; exact declared input types for operator classes","description":["An obsolete type name that formerly served many of the above purposes."],"facts":[{"label":"Catalog name","value":"pg_catalog.opaque"},{"label":"Type OID","value":"2282"},{"label":"Type kind","value":"Pseudo-type"},{"label":"Declared length","value":"4 bytes"},{"label":"Storage strategy","value":"plain"},{"label":"Input function","value":"opaque_in"},{"label":"Output function","value":"opaque_out"},{"label":"Documented declaration","value":"opaque"},{"label":"Manual description","value":"An obsolete type name that formerly served many of the above purposes."}],"manual_documentation":"dedicated family chapter","manual_html":"\u003cdiv class=\"sect1\" id=\"DATATYPE-PSEUDO\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch2 class=\"title\"\u003e8.21. Pseudo-Types\u003c/h2\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e type system contains a number of special-purpose entries that are collectively called \u003cem class=\"firstterm\"\u003epseudo-types\u003c/em\u003e. A pseudo-type cannot be used as a column data type, but it can be used to declare a function's argument or result type. Each of the available pseudo-types is useful in situations where a function's behavior does not correspond to simply taking or returning a value of a specific SQL data type. \u003ca class=\"xref\" href=\"/docs/12/datatype-pseudo.html#DATATYPE-PSEUDOTYPES-TABLE\" title=\"Table 8.27. Pseudo-Types\"\u003eTable 8.27\u003c/a\u003e lists the existing pseudo-types.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"DATATYPE-PSEUDOTYPES-TABLE\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 8.27. Pseudo-Types\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eName\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eany\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function accepts any input data type.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eanyelement\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function accepts any data type (see \u003ca class=\"xref\" href=\"/docs/12/extend-type-system.html#EXTEND-TYPES-POLYMORPHIC\" title=\"37.2.5. Polymorphic Types\"\u003eSection 37.2.5\u003c/a\u003e).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eanyarray\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function accepts any array data type (see \u003ca class=\"xref\" href=\"/docs/12/extend-type-system.html#EXTEND-TYPES-POLYMORPHIC\" title=\"37.2.5. Polymorphic Types\"\u003eSection 37.2.5\u003c/a\u003e).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eanynonarray\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function accepts any non-array data type (see \u003ca class=\"xref\" href=\"/docs/12/extend-type-system.html#EXTEND-TYPES-POLYMORPHIC\" title=\"37.2.5. Polymorphic Types\"\u003eSection 37.2.5\u003c/a\u003e).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eanyenum\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function accepts any enum data type (see \u003ca class=\"xref\" href=\"/docs/12/extend-type-system.html#EXTEND-TYPES-POLYMORPHIC\" title=\"37.2.5. Polymorphic Types\"\u003eSection 37.2.5\u003c/a\u003e and \u003ca class=\"xref\" href=\"/docs/12/datatype-enum.html\" title=\"8.7. Enumerated Types\"\u003eSection 8.7\u003c/a\u003e).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eanyrange\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function accepts any range data type (see \u003ca class=\"xref\" href=\"/docs/12/extend-type-system.html#EXTEND-TYPES-POLYMORPHIC\" title=\"37.2.5. Polymorphic Types\"\u003eSection 37.2.5\u003c/a\u003e and \u003ca class=\"xref\" href=\"/docs/12/rangetypes.html\" title=\"8.17. Range Types\"\u003eSection 8.17\u003c/a\u003e).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003ecstring\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function accepts or returns a null-terminated C string.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einternal\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function accepts or returns a server-internal data type.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003elanguage_handler\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eA procedural language call handler is declared to return \u003ccode class=\"type\"\u003elanguage_handler\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003efdw_handler\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eA foreign-data wrapper handler is declared to return \u003ccode class=\"type\"\u003efdw_handler\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eindex_am_handler\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eAn index access method handler is declared to return \u003ccode class=\"type\"\u003eindex_am_handler\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003etsm_handler\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eA tablesample method handler is declared to return \u003ccode class=\"type\"\u003etsm_handler\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003erecord\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIdentifies a function taking or returning an unspecified row type.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003etrigger\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eA trigger function is declared to return \u003ccode class=\"type\"\u003etrigger.\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eevent_trigger\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eAn event trigger function is declared to return \u003ccode class=\"type\"\u003eevent_trigger.\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003epg_ddl_command\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIdentifies a representation of DDL commands that is available to event triggers.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003evoid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function returns no value.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eunknown\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIdentifies a not-yet-resolved type, e.g., of an undecorated string literal.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eopaque\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eAn obsolete type name that formerly served many of the above purposes.\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cp\u003eFunctions coded in C (whether built-in or dynamically loaded) can be declared to accept or return any of these pseudo data types. It is up to the function author to ensure that the function will behave safely when a pseudo-type is used as an argument type.\u003c/p\u003e\n\u003cp\u003eFunctions coded in procedural languages can use pseudo-types only as allowed by their implementation languages. At present most procedural languages forbid use of a pseudo-type as an argument type, and allow only \u003ccode class=\"type\"\u003evoid\u003c/code\u003e and \u003ccode class=\"type\"\u003erecord\u003c/code\u003e as a result type (plus \u003ccode class=\"type\"\u003etrigger\u003c/code\u003e or \u003ccode class=\"type\"\u003eevent_trigger\u003c/code\u003e when the function is used as a trigger or event trigger). Some also support polymorphic functions using the types \u003ccode class=\"type\"\u003eanyelement\u003c/code\u003e, \u003ccode class=\"type\"\u003eanyarray\u003c/code\u003e, \u003ccode class=\"type\"\u003eanynonarray\u003c/code\u003e, \u003ccode class=\"type\"\u003eanyenum\u003c/code\u003e, and \u003ccode class=\"type\"\u003eanyrange\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThe \u003ccode class=\"type\"\u003einternal\u003c/code\u003e pseudo-type is used to declare functions that are meant only to be called internally by the database system, and not by direct invocation in an SQL query. If a function has at least one \u003ccode class=\"type\"\u003einternal\u003c/code\u003e-type argument then it cannot be called from SQL. To preserve the type safety of this restriction it is important to follow this coding rule: do not create any function that is declared to return \u003ccode class=\"type\"\u003einternal\u003c/code\u003e unless it has at least one \u003ccode class=\"type\"\u003einternal\u003c/code\u003e argument.\u003c/p\u003e\n\u003c/div\u003e","manual_path":"datatype-pseudo.html","operator_classes":[],"operators":[],"ranges":[],"related":[{"label":"pg_type catalog","url":"/wiki/catalog/pg_type/?v=12"},{"label":"pg_cast catalog","url":"/wiki/catalog/pg_cast/?v=12"},{"label":"pg_operator catalog","url":"/wiki/catalog/pg_operator/?v=12"},{"label":"pg_opclass catalog","url":"/wiki/catalog/pg_opclass/?v=12"},{"label":"Arrays","url":"/wiki/type/arrays/?v=12"}],"release":{"channel":"historical","label":"12.22","major":"12","manual_sha256":{"arrays.html":"2a1d5b8dfe0064f1b5aa4eb25b101d3c92e7f092491e0184ad89ade8b7a825e8","catalog-pg-type.html":"5674f582eb5f5a201e3279894a25ede3efeb2dfbea965dae2473e65469a8eb3b","datatype-binary.html":"bee5b5a05f1e573155d723fffca2dd9d6c3cf1b7155ca1069814f9b6ba1c1e76","datatype-bit.html":"f8c57c9b72ea2b24582ab4c5ea81660f162eef4b03f48b1c71eb3672f2e2a3af","datatype-boolean.html":"6e83a752c08f4891efcd996f92fc6f8c96dd8760eb730d79783d6b5145f92ae1","datatype-character.html":"5cf6bf554d46a92fda8d9e5158cc9964c015c224e7da3f226155f958047a7369","datatype-datetime.html":"02ddb4310b1a1d3a759869e656bc5f837b7ce61c1ddf5701546f9285e74d143c","datatype-enum.html":"78237a6d8387eeedac05b166e627e59f6ee29a1bc47e850a22fedee7ad8ca9eb","datatype-geometric.html":"8a51858aeb38b863e44e57eb6b7ca02d282145975b8b49e8ce753fb3eabba12b","datatype-json.html":"eed123a5f22e2522a6e43ad67d67bef2f9f209b5d70da55a822b4dadd0e6848a","datatype-money.html":"91cfcb25cf0313753e7c3098ca918fdee45318d78ce1bae52f3a59d868cd9551","datatype-net-types.html":"abf3c23ae6c10643d5b091641239324be59ddab0679355cbcf099c82941674b1","datatype-numeric.html":"5482ecbec4f86631e35751952bf4d8debb1424c5f329565685685714f54e0368","datatype-oid.html":"5675d9e3b694f46538248a1a9f533609078817a7b6d469c53533973cbfaecc8c","datatype-pg-lsn.html":"a369e6a7c9aeb0ba3cd3b7cea5b809fd3ff148996dfa59b71ac5a99b80f0d4b2","datatype-pseudo.html":"e0455388a66df9e1321519fdecdcb2edcdd00abf78a75479c7f219ccad04ac11","datatype-textsearch.html":"9ee0b8e32a27d9f5af34d8a31002411fa33f560bdac49ebf5fdc8a4b524c9203","datatype-uuid.html":"d3f58c1cb237f8c7c5e7bd2ea1be18994f363941b52a1783425351466eba97c0","datatype-xml.html":"228f72b0ae345e7cb5513eee33cce0d312df9ad794f668c59a3016d93d36466f","datatype.html":"2646cb1a56c6ab3b2cf31d97585971c923d04fc7fb36632f3bb57ddd6849739b","domains.html":"133a23c1b208d3ce953b2a4f4b5ddd0a47d8d093f05f0e2b541308a4afc25a15","functions-info.html":"dbe90284615d38661cab8dcb9302810557d9c22b7e83d05616c3b82444935dd1","rangetypes.html":"e71dd2db464af536ed2ce9627b1d37fb5b8f1b12939243883f194a59eb11c669","rowtypes.html":"25a887a4b9b9e6da7edef8b313e38c5c73e09d61eae3f411b50535be052b5a2c","sql-createdomain.html":"6d187384684c2d6005414aaa89dac455d884903191d43a16213b453dfc8d1ba2"},"ref":"https://ftp.postgresql.org/pub/source/v12.22/postgresql-12.22.tar.bz2","revision":"8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b","source_files":{"doc/src/sgml/datatype.sgml":"59d0f81d0b82a384dc35925a39b385539806b0673a6a9f55db3ca4a07056442d","src/include/catalog/pg_am.dat":"52f6c0a31bbfcc71fb24e833607aed6e6da1d2ecfcd69669df83110a2a214a75","src/include/catalog/pg_am.h":"e8423c005bd19d02d7b2339c9704a55e628c9cafdd2e46184720c99999d8ff05","src/include/catalog/pg_cast.dat":"fa1d7bb635ff1821f1b57d5815ad8d524c561533c21c5d555780ffda555639b6","src/include/catalog/pg_cast.h":"72d5d91312fdb18893bf343d9a148092c19a06298472943867bb6e93d66441ab","src/include/catalog/pg_opclass.dat":"6bc64f86c78c9dbd860b6a3bd27c6853e3fcd7c9e13c52f62d7b5dc829a1199b","src/include/catalog/pg_opclass.h":"1db20479da0afc514740198825c89f37fa9081c70d9f1c35e9e37e321c48e72a","src/include/catalog/pg_operator.dat":"fa45f4e3c5d2452f7fa13a92c3c7347b9688977553cb3d3db93e1dc0aa222ad5","src/include/catalog/pg_operator.h":"ada4daa437a4a8829c36b0bc66a1026cb27d42f4cc86af22fddbac609553c8ce","src/include/catalog/pg_opfamily.dat":"96dae0ab721eeb7c05442cd7d296232339394ec16d7bf916b63a982f8ac78c85","src/include/catalog/pg_opfamily.h":"7e9b937a08f23c61206bfb5c821b0a68fc3dd2b9174cace7f8f38facb767d01e","src/include/catalog/pg_proc.dat":"f0ff4501c9ee95b8ee46749ae7565ad23c792e2f2ac5313ab73912cbe6baa3d6","src/include/catalog/pg_proc.h":"3055dfc9f51d3cd7db83a9684931f572620e9c74e86b4fb109f5e97aa5fe1c1f","src/include/catalog/pg_range.dat":"67cfb6cbfef28419763cf4c8dc085cf3fcc2ddc4b6673dd95d38ecfb266dd1f8","src/include/catalog/pg_range.h":"58a887a43ccdcd8b3ac7057728d7eb2a0ef1fce4ac712cc9c43788232c42e6d6","src/include/catalog/pg_type.dat":"033bff49da0c9491404403831697e084717e7f6dfde0064821f4b752d6b9e0b3","src/include/catalog/pg_type.h":"a66d3569a61d38a565a6ec52c3648f9a73485a3a664d6d15bff7e9af0fc8a2ce"},"source_sha256":"8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"},"sections":[],"signature":"opaque","sources":[{"label":"PostgreSQL 12 English manual","path":"datatype-pseudo.html","sha256":"e0455388a66df9e1321519fdecdcb2edcdd00abf78a75479c7f219ccad04ac11","url":"/docs/12/datatype-pseudo.html"},{"label":"Matching PostgreSQL source archive","sha256":"8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b","url":"https://ftp.postgresql.org/pub/source/v12.22/postgresql-12.22.tar.bz2"}]},"ManualEvidence":{"manual_path":"datatype-pseudo.html","release":{"channel":"historical","label":"12.22","major":"12","manual_sha256":{"arrays.html":"2a1d5b8dfe0064f1b5aa4eb25b101d3c92e7f092491e0184ad89ade8b7a825e8","catalog-pg-type.html":"5674f582eb5f5a201e3279894a25ede3efeb2dfbea965dae2473e65469a8eb3b","datatype-binary.html":"bee5b5a05f1e573155d723fffca2dd9d6c3cf1b7155ca1069814f9b6ba1c1e76","datatype-bit.html":"f8c57c9b72ea2b24582ab4c5ea81660f162eef4b03f48b1c71eb3672f2e2a3af","datatype-boolean.html":"6e83a752c08f4891efcd996f92fc6f8c96dd8760eb730d79783d6b5145f92ae1","datatype-character.html":"5cf6bf554d46a92fda8d9e5158cc9964c015c224e7da3f226155f958047a7369","datatype-datetime.html":"02ddb4310b1a1d3a759869e656bc5f837b7ce61c1ddf5701546f9285e74d143c","datatype-enum.html":"78237a6d8387eeedac05b166e627e59f6ee29a1bc47e850a22fedee7ad8ca9eb","datatype-geometric.html":"8a51858aeb38b863e44e57eb6b7ca02d282145975b8b49e8ce753fb3eabba12b","datatype-json.html":"eed123a5f22e2522a6e43ad67d67bef2f9f209b5d70da55a822b4dadd0e6848a","datatype-money.html":"91cfcb25cf0313753e7c3098ca918fdee45318d78ce1bae52f3a59d868cd9551","datatype-net-types.html":"abf3c23ae6c10643d5b091641239324be59ddab0679355cbcf099c82941674b1","datatype-numeric.html":"5482ecbec4f86631e35751952bf4d8debb1424c5f329565685685714f54e0368","datatype-oid.html":"5675d9e3b694f46538248a1a9f533609078817a7b6d469c53533973cbfaecc8c","datatype-pg-lsn.html":"a369e6a7c9aeb0ba3cd3b7cea5b809fd3ff148996dfa59b71ac5a99b80f0d4b2","datatype-pseudo.html":"e0455388a66df9e1321519fdecdcb2edcdd00abf78a75479c7f219ccad04ac11","datatype-textsearch.html":"9ee0b8e32a27d9f5af34d8a31002411fa33f560bdac49ebf5fdc8a4b524c9203","datatype-uuid.html":"d3f58c1cb237f8c7c5e7bd2ea1be18994f363941b52a1783425351466eba97c0","datatype-xml.html":"228f72b0ae345e7cb5513eee33cce0d312df9ad794f668c59a3016d93d36466f","datatype.html":"2646cb1a56c6ab3b2cf31d97585971c923d04fc7fb36632f3bb57ddd6849739b","domains.html":"133a23c1b208d3ce953b2a4f4b5ddd0a47d8d093f05f0e2b541308a4afc25a15","functions-info.html":"dbe90284615d38661cab8dcb9302810557d9c22b7e83d05616c3b82444935dd1","rangetypes.html":"e71dd2db464af536ed2ce9627b1d37fb5b8f1b12939243883f194a59eb11c669","rowtypes.html":"25a887a4b9b9e6da7edef8b313e38c5c73e09d61eae3f411b50535be052b5a2c","sql-createdomain.html":"6d187384684c2d6005414aaa89dac455d884903191d43a16213b453dfc8d1ba2"},"ref":"https://ftp.postgresql.org/pub/source/v12.22/postgresql-12.22.tar.bz2","revision":"8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b","source_files":{"doc/src/sgml/datatype.sgml":"59d0f81d0b82a384dc35925a39b385539806b0673a6a9f55db3ca4a07056442d","src/include/catalog/pg_am.dat":"52f6c0a31bbfcc71fb24e833607aed6e6da1d2ecfcd69669df83110a2a214a75","src/include/catalog/pg_am.h":"e8423c005bd19d02d7b2339c9704a55e628c9cafdd2e46184720c99999d8ff05","src/include/catalog/pg_cast.dat":"fa1d7bb635ff1821f1b57d5815ad8d524c561533c21c5d555780ffda555639b6","src/include/catalog/pg_cast.h":"72d5d91312fdb18893bf343d9a148092c19a06298472943867bb6e93d66441ab","src/include/catalog/pg_opclass.dat":"6bc64f86c78c9dbd860b6a3bd27c6853e3fcd7c9e13c52f62d7b5dc829a1199b","src/include/catalog/pg_opclass.h":"1db20479da0afc514740198825c89f37fa9081c70d9f1c35e9e37e321c48e72a","src/include/catalog/pg_operator.dat":"fa45f4e3c5d2452f7fa13a92c3c7347b9688977553cb3d3db93e1dc0aa222ad5","src/include/catalog/pg_operator.h":"ada4daa437a4a8829c36b0bc66a1026cb27d42f4cc86af22fddbac609553c8ce","src/include/catalog/pg_opfamily.dat":"96dae0ab721eeb7c05442cd7d296232339394ec16d7bf916b63a982f8ac78c85","src/include/catalog/pg_opfamily.h":"7e9b937a08f23c61206bfb5c821b0a68fc3dd2b9174cace7f8f38facb767d01e","src/include/catalog/pg_proc.dat":"f0ff4501c9ee95b8ee46749ae7565ad23c792e2f2ac5313ab73912cbe6baa3d6","src/include/catalog/pg_proc.h":"3055dfc9f51d3cd7db83a9684931f572620e9c74e86b4fb109f5e97aa5fe1c1f","src/include/catalog/pg_range.dat":"67cfb6cbfef28419763cf4c8dc085cf3fcc2ddc4b6673dd95d38ecfb266dd1f8","src/include/catalog/pg_range.h":"58a887a43ccdcd8b3ac7057728d7eb2a0ef1fce4ac712cc9c43788232c42e6d6","src/include/catalog/pg_type.dat":"033bff49da0c9491404403831697e084717e7f6dfde0064821f4b752d6b9e0b3","src/include/catalog/pg_type.h":"a66d3569a61d38a565a6ec52c3648f9a73485a3a664d6d15bff7e9af0fc8a2ce"},"source_sha256":"8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b"},"sources":[{"label":"PostgreSQL 12 English manual","path":"datatype-pseudo.html","sha256":"e0455388a66df9e1321519fdecdcb2edcdd00abf78a75479c7f219ccad04ac11","url":"/docs/12/datatype-pseudo.html"},{"label":"Matching PostgreSQL source archive","sha256":"8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b","url":"https://ftp.postgresql.org/pub/source/v12.22/postgresql-12.22.tar.bz2"}]},"MeasuredEvidence":{}},"Text":{"Collection":"type","Key":"opaque","SourceDatabase":"center","Version":"12","Locale":"en","Title":"opaque","Summary":"An obsolete type name that formerly served many of the above purposes.","BodyHTML":"\u003cdiv id=\"DATATYPE-PSEUDO\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch2\u003e8.21. Pseudo-Types\u003c/h2\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe \u003cspan\u003ePostgreSQL\u003c/span\u003e type system contains a number of special-purpose entries that are collectively called \u003cem\u003epseudo-types\u003c/em\u003e. A pseudo-type cannot be used as a column data type, but it can be used to declare a function\u0026#39;s argument or result type. Each of the available pseudo-types is useful in situations where a function\u0026#39;s behavior does not correspond to simply taking or returning a value of a specific SQL data type. \u003ca href=\"/docs/12/datatype-pseudo.html#DATATYPE-PSEUDOTYPES-TABLE\" rel=\"nofollow\"\u003eTable 8.27\u003c/a\u003e lists the existing pseudo-types.\u003c/p\u003e\n\u003cdiv id=\"DATATYPE-PSEUDOTYPES-TABLE\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 8.27. Pseudo-Types\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eName\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eany\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function accepts any input data type.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eanyelement\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function accepts any data type (see \u003ca href=\"/docs/12/extend-type-system.html#EXTEND-TYPES-POLYMORPHIC\" rel=\"nofollow\"\u003eSection 37.2.5\u003c/a\u003e).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eanyarray\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function accepts any array data type (see \u003ca href=\"/docs/12/extend-type-system.html#EXTEND-TYPES-POLYMORPHIC\" rel=\"nofollow\"\u003eSection 37.2.5\u003c/a\u003e).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eanynonarray\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function accepts any non-array data type (see \u003ca href=\"/docs/12/extend-type-system.html#EXTEND-TYPES-POLYMORPHIC\" rel=\"nofollow\"\u003eSection 37.2.5\u003c/a\u003e).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eanyenum\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function accepts any enum data type (see \u003ca href=\"/docs/12/extend-type-system.html#EXTEND-TYPES-POLYMORPHIC\" rel=\"nofollow\"\u003eSection 37.2.5\u003c/a\u003e and \u003ca href=\"/docs/12/datatype-enum.html\" rel=\"nofollow\"\u003eSection 8.7\u003c/a\u003e).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eanyrange\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function accepts any range data type (see \u003ca href=\"/docs/12/extend-type-system.html#EXTEND-TYPES-POLYMORPHIC\" rel=\"nofollow\"\u003eSection 37.2.5\u003c/a\u003e and \u003ca href=\"/docs/12/rangetypes.html\" rel=\"nofollow\"\u003eSection 8.17\u003c/a\u003e).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003ecstring\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function accepts or returns a null-terminated C string.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003einternal\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function accepts or returns a server-internal data type.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003elanguage_handler\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eA procedural language call handler is declared to return \u003ccode\u003elanguage_handler\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003efdw_handler\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eA foreign-data wrapper handler is declared to return \u003ccode\u003efdw_handler\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eindex_am_handler\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eAn index access method handler is declared to return \u003ccode\u003eindex_am_handler\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etsm_handler\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eA tablesample method handler is declared to return \u003ccode\u003etsm_handler\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003erecord\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIdentifies a function taking or returning an unspecified row type.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003etrigger\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eA trigger function is declared to return \u003ccode\u003etrigger.\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eevent_trigger\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eAn event trigger function is declared to return \u003ccode\u003eevent_trigger.\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003epg_ddl_command\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIdentifies a representation of DDL commands that is available to event triggers.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003evoid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function returns no value.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eunknown\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIdentifies a not-yet-resolved type, e.g., of an undecorated string literal.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eopaque\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eAn obsolete type name that formerly served many of the above purposes.\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003cp\u003eFunctions coded in C (whether built-in or dynamically loaded) can be declared to accept or return any of these pseudo data types. It is up to the function author to ensure that the function will behave safely when a pseudo-type is used as an argument type.\u003c/p\u003e\n\u003cp\u003eFunctions coded in procedural languages can use pseudo-types only as allowed by their implementation languages. At present most procedural languages forbid use of a pseudo-type as an argument type, and allow only \u003ccode\u003evoid\u003c/code\u003e and \u003ccode\u003erecord\u003c/code\u003e as a result type (plus \u003ccode\u003etrigger\u003c/code\u003e or \u003ccode\u003eevent_trigger\u003c/code\u003e when the function is used as a trigger or event trigger). Some also support polymorphic functions using the types \u003ccode\u003eanyelement\u003c/code\u003e, \u003ccode\u003eanyarray\u003c/code\u003e, \u003ccode\u003eanynonarray\u003c/code\u003e, \u003ccode\u003eanyenum\u003c/code\u003e, and \u003ccode\u003eanyrange\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003einternal\u003c/code\u003e pseudo-type is used to declare functions that are meant only to be called internally by the database system, and not by direct invocation in an SQL query. If a function has at least one \u003ccode\u003einternal\u003c/code\u003e-type argument then it cannot be called from SQL. To preserve the type safety of this restriction it is important to follow this coding rule: do not create any function that is declared to return \u003ccode\u003einternal\u003c/code\u003e unless it has at least one \u003ccode\u003einternal\u003c/code\u003e argument.\u003c/p\u003e\n\u003c/div\u003e","SourceRevision":"8df3c0474782589d3c6f374b5133b1bd14d168086edbc13c6e72e67dd4527a3b","ContentHash":"f702d513985cd7dc2272f566fe443f83bb1cde75f1dfe83bc2536f4e4ecd01e1","Payload":{"description":["An obsolete type name that formerly served many of the above purposes."],"manual_html":"\u003cdiv class=\"sect1\" id=\"DATATYPE-PSEUDO\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch2 class=\"title\"\u003e8.21. Pseudo-Types\u003c/h2\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e type system contains a number of special-purpose entries that are collectively called \u003cem class=\"firstterm\"\u003epseudo-types\u003c/em\u003e. A pseudo-type cannot be used as a column data type, but it can be used to declare a function's argument or result type. Each of the available pseudo-types is useful in situations where a function's behavior does not correspond to simply taking or returning a value of a specific SQL data type. \u003ca class=\"xref\" href=\"/docs/12/datatype-pseudo.html#DATATYPE-PSEUDOTYPES-TABLE\" title=\"Table 8.27. Pseudo-Types\"\u003eTable 8.27\u003c/a\u003e lists the existing pseudo-types.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"DATATYPE-PSEUDOTYPES-TABLE\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 8.27. Pseudo-Types\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eName\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eany\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function accepts any input data type.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eanyelement\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function accepts any data type (see \u003ca class=\"xref\" href=\"/docs/12/extend-type-system.html#EXTEND-TYPES-POLYMORPHIC\" title=\"37.2.5. Polymorphic Types\"\u003eSection 37.2.5\u003c/a\u003e).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eanyarray\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function accepts any array data type (see \u003ca class=\"xref\" href=\"/docs/12/extend-type-system.html#EXTEND-TYPES-POLYMORPHIC\" title=\"37.2.5. Polymorphic Types\"\u003eSection 37.2.5\u003c/a\u003e).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eanynonarray\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function accepts any non-array data type (see \u003ca class=\"xref\" href=\"/docs/12/extend-type-system.html#EXTEND-TYPES-POLYMORPHIC\" title=\"37.2.5. Polymorphic Types\"\u003eSection 37.2.5\u003c/a\u003e).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eanyenum\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function accepts any enum data type (see \u003ca class=\"xref\" href=\"/docs/12/extend-type-system.html#EXTEND-TYPES-POLYMORPHIC\" title=\"37.2.5. Polymorphic Types\"\u003eSection 37.2.5\u003c/a\u003e and \u003ca class=\"xref\" href=\"/docs/12/datatype-enum.html\" title=\"8.7. Enumerated Types\"\u003eSection 8.7\u003c/a\u003e).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eanyrange\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function accepts any range data type (see \u003ca class=\"xref\" href=\"/docs/12/extend-type-system.html#EXTEND-TYPES-POLYMORPHIC\" title=\"37.2.5. Polymorphic Types\"\u003eSection 37.2.5\u003c/a\u003e and \u003ca class=\"xref\" href=\"/docs/12/rangetypes.html\" title=\"8.17. Range Types\"\u003eSection 8.17\u003c/a\u003e).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003ecstring\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function accepts or returns a null-terminated C string.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003einternal\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function accepts or returns a server-internal data type.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003elanguage_handler\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eA procedural language call handler is declared to return \u003ccode class=\"type\"\u003elanguage_handler\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003efdw_handler\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eA foreign-data wrapper handler is declared to return \u003ccode class=\"type\"\u003efdw_handler\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eindex_am_handler\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eAn index access method handler is declared to return \u003ccode class=\"type\"\u003eindex_am_handler\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003etsm_handler\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eA tablesample method handler is declared to return \u003ccode class=\"type\"\u003etsm_handler\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003erecord\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIdentifies a function taking or returning an unspecified row type.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003etrigger\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eA trigger function is declared to return \u003ccode class=\"type\"\u003etrigger.\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eevent_trigger\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eAn event trigger function is declared to return \u003ccode class=\"type\"\u003eevent_trigger.\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003epg_ddl_command\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIdentifies a representation of DDL commands that is available to event triggers.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003evoid\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIndicates that a function returns no value.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eunknown\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIdentifies a not-yet-resolved type, e.g., of an undecorated string literal.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eopaque\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eAn obsolete type name that formerly served many of the above purposes.\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cp\u003eFunctions coded in C (whether built-in or dynamically loaded) can be declared to accept or return any of these pseudo data types. It is up to the function author to ensure that the function will behave safely when a pseudo-type is used as an argument type.\u003c/p\u003e\n\u003cp\u003eFunctions coded in procedural languages can use pseudo-types only as allowed by their implementation languages. At present most procedural languages forbid use of a pseudo-type as an argument type, and allow only \u003ccode class=\"type\"\u003evoid\u003c/code\u003e and \u003ccode class=\"type\"\u003erecord\u003c/code\u003e as a result type (plus \u003ccode class=\"type\"\u003etrigger\u003c/code\u003e or \u003ccode class=\"type\"\u003eevent_trigger\u003c/code\u003e when the function is used as a trigger or event trigger). Some also support polymorphic functions using the types \u003ccode class=\"type\"\u003eanyelement\u003c/code\u003e, \u003ccode class=\"type\"\u003eanyarray\u003c/code\u003e, \u003ccode class=\"type\"\u003eanynonarray\u003c/code\u003e, \u003ccode class=\"type\"\u003eanyenum\u003c/code\u003e, and \u003ccode class=\"type\"\u003eanyrange\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThe \u003ccode class=\"type\"\u003einternal\u003c/code\u003e pseudo-type is used to declare functions that are meant only to be called internally by the database system, and not by direct invocation in an SQL query. If a function has at least one \u003ccode class=\"type\"\u003einternal\u003c/code\u003e-type argument then it cannot be called from SQL. To preserve the type safety of this restriction it is important to follow this coding rule: do not create any function that is declared to return \u003ccode class=\"type\"\u003einternal\u003c/code\u003e unless it has at least one \u003ccode class=\"type\"\u003einternal\u003c/code\u003e argument.\u003c/p\u003e\n\u003c/div\u003e","related":[{"label":"pg_type catalog","url":"/wiki/catalog/pg_type/?v=12"},{"label":"pg_cast catalog","url":"/wiki/catalog/pg_cast/?v=12"},{"label":"pg_operator catalog","url":"/wiki/catalog/pg_operator/?v=12"},{"label":"pg_opclass catalog","url":"/wiki/catalog/pg_opclass/?v=12"},{"label":"Arrays","url":"/wiki/type/arrays/?v=12"}],"sections":[]}},"RequestedLocale":"zh-Hans","Fallback":true,"Versions":["10","11","12"],"Locales":["en"],"Signatures":null,"Spellings":null,"SQLState":null,"Evidence":null}
