Я пытаюсь написать функцию, которая будет динамически создавать оператор sql, но я сталкиваюсь с проблемами с типами преобразований, поэтому, как я могу определить, используя тип поля, если его нужно заключить в кавычки
-- using this I can recover the types of each field
-- but I do not have a simple way to express that for a specific type it need
-- to quote
create table test (
id serial not null,
employee_name text,
salary decimal(12,2),
hire_date date,
active boolean
);
select column_name,data_type, null as need_to_be_quoted
from information_schema.columns
where table_name = 'table_name';
column type need to be quoted (this is a missing information)
-------------------------------------
id integer false
employee_name text true
salary decimal false
hire_date date true
active boolean false
quote_ident
docs говорит:
Возвращает данную строку, заключенную в соответствующие кавычки, для использования в качестве идентификатора в строке оператора SQL. Кавычки добавляются только в случае необходимости
Но это не то, чего я ожидал:
insert into test (employee_name, salary, hire_date, active)
values (quote_identy('John Doe'), quote_identy(100000), quote_identy(current_date), quote_identy(true));
Это необходимо, потому что я пытаюсь динамически генерировать строку оператора.
У меня есть значения для вставки в какую-то таблицу, я могу определить тип каждого значения, но чтобы сгенерировать оператор вставки строки, я должен знать, следует ли указывать конкретный тип значения или нет, например
- text: тип должен заключаться в кавычки в строковом операторе
- логический: не должен заключаться в кавычки
- числовой: не должен заключаться в кавычки
- дата: должен бытьпроцитировано