PostgreSQL - Как приводить динамически? - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть столбец с типом набора данных в тексте.

Итак, я хочу сделать что-то вроде этого:

SELECT CAST ('100' AS %INTEGER%);
SELECT CAST (100 AS %TEXT%);

SELECT CAST ('100' AS (SELECT type FROM dataset_types WHERE id = 2));

Возможно ли это с PostgreSQL?

1 Ответ

1 голос
/ 10 апреля 2019

SQL строго типизирован и статичен.Postgres требует знать количество столбцов и их тип данных на момент вызова.Так что для этого вам нужен динамический SQL в одном из расширений процедурного языка.И тогда вы все еще сталкиваетесь с препятствием, что функции (обязательно) имеют фиксированный тип возврата.Связанный:

Или Вы идете с двухступенчатым потоком.Сначала объедините строку запроса (с другим SELECT запросом).Затем выполните сгенерированную строку запроса.Два обращения к серверу.

  1. SELECT '100::' || type FROM dataset_types WHERE id = 2; - запись результирующей строки

  2. Выполнить результат.(И убедитесь, что вы не открыли векторы для инъекции SQL!)

О синтаксисе краткого приведения:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...