Context
У меня действительно крошечная проблема при создании таблицы PostgreSQL с использованием подзапроса SELECT
, где я хотел бы инициализировать поле со NULL
значениями типа INTEGER
(по умолчанию они TEXT
, если я не указываю тип).
Достаточно разговоров, вот фрагмент кода с объяснениями фона:
CREATE TABLE my_table AS
SELECT
0 AS fid, -- initiate new field here, it doesn't exist in the table where the select is run on
gid,
min(distance) AS mindist
FROM
schema.points
GROUP BY
gid;
Это работает, как и ожидалось, у меня есть 0
везде в поле fid
, которое мне нужно создать в это время.
Но я не совсем доволен 0
значений, поскольку они будут иметь важное значение в дальнейших вычислениях, поэтому я хотел бы инициализировать это поле fid
значениями NULL
(не волнуйтесь, это не pkey
).
Поэтому я изменил это на следующее:
CREATE TABLE my_table AS
SELECT
NULL AS fid, -- initiate new field here, it doesn't exist in the table where the select is run on
gid,
min(distance) AS mindist
FROM
schema.points
GROUP BY
gid;
И оно работает хорошо!
За исключением того, что теперь это поле TEXT
(похоже, это тип по умолчанию) когда используется NULL
), и мне действительно нужно это как INTEGER
(у меня возникают дальнейшие проблемы, если я позволю ему как TEXT
).
Вопрос
Как я мог установить (то есть приведение, технически говоря) для поля fid
равным NULL
и типа INTEGER
одновременно в данном конкретном случае запрос?
Ни одна из этих работ (я каждый раз сталкиваюсь с синтаксическими ошибками):
NULL AS fid::INTEGER
INTEGER NULL AS fid
NULL INTEGER AS fid
Окружающая среда
PostgreSQL 10.12