有一次机会(混合参数的顺序),在我的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)
)。
答案 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
的一部分。它不是外部参照。