#postgresql
#postgresql
Вопрос:
Случайно (перепутав порядок параметров), я установил тип столбца IMAGE
в моем экземпляре postgres), и это сработало (не выдало ошибку)! Я понятия не имею, что это за тип, и он не указан в официальной таблице типов.
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 | | |
Немного поискав, я нашел вызываемое расширение postgres 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. У вас есть таблица с именем
image
?2. Может быть, домен ? Вы можете проверить с помощью
dD
3. @stickybit Да, есть представление под названием Image . Как это связано с типами?
4. Таблица или представление также являются типом.
5. Странно, но нормально 🙂
Ответ №1:
Вы создали составной тип (случайно?). Из документов:
Всякий раз, когда вы создаете таблицу, также автоматически создается составной тип с тем же именем, что и у таблицы, для представления типа строки таблицы.
Похоже, то же самое относится и к представлениям, хотя я не смог найти, что это указано явно. В любом случае, проверьте это:
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
. Это не внешняя ссылка.