Postgres中的IMAGE类型是什么?

时间:2019-04-12 10:48:31

标签: postgresql

有一次机会(混合参数的顺序),在我的postgres实例中将列类型设置为IMAGE,并且它起作用了(没有收到错误)!我不知道这种类型是什么,并且没有在the official table of types中列出。

mydb=# CREATE TABLE tmp_image( image_column image );
CREATE TABLE
mydb=# \d tmp_image 
               Table "public.tmp_image"
    Column    | Type  | Collation | Nullable | Default 
--------------+-------+-----------+----------+---------
 image_column | image |           |          | 

经过一番搜索,我发现了a postgres extension called pg_image,但是我没有安装任何扩展程序:

 \dx
                 List of installed extensions
  Name   | Version |   Schema   |         Description          
---------+---------+------------+------------------------------
 plpgsql | 1.0     | pg_catalog | PL/pgSQL procedural language

我似乎正在运行10.7(psql (PostgreSQL) 10.7 (Ubuntu 10.7-0ubuntu0.18.04.1))。

1 个答案:

答案 0 :(得分:1)

您已经创建了composite type(偶然吗?)。从文档中:

  

无论何时创建表,都会自动创建一个与该表同名的复合类型,以表示该表的行类型。

即使我找不到明确说明的内容,这似乎也适用于视图。无论如何,请查看以下内容:

postgres=# CREATE TABLE test (id int, data text);
CREATE TABLE

postgres=# CREATE TABLE test2 (id int, field test); -- note the type of [field]
CREATE TABLE

postgres=# INSERT INTO test2 (id, field) VALUES (2, ROW(1, 'test'));
INSERT 0 1

postgres=# SELECT * FROM test2;
 id | field 
----+-------
  2 | (1,test)
(1 row)

postgres=# SELECT (field).data FROM test2;
 data 
------
 test
(1 row)

postgres=# SELECT * FROM test;
 id 
----
(0 rows)

请注意test如何成为test2的一部分。它不是外部参照。