SQL строка не оценивается PostgreSQL - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть SQL функция в PostgreSQL, которая динамически возвращает имена столбцов таблицы. Folfoling - это функция, которая возвращает мне список имен столбцов (отформатированный).

ФУНКЦИЯ

CREATE OR REPLACE FUNCTION falc_app.get_quoted_column_names_for_a_table(sel_table_name text)
  RETURNS TABLE(
    script text
  )
AS  
 $$
   select array_to_string(
    array(
      select CAST ('|| quote_nullable(' || (column_name) ||') || '   as text) as script
                    FROM information_schema.COLUMNS
        WHERE COLUMNS.table_schema = 'falc_app'
          AND COLUMNS.TABLE_NAME = sel_table_name
        ORDER BY COLUMNS.ordinal_position ), ''','' ')

 $$
LANGUAGE sql;

ВЫХОД

'col_username','col_password',......

ПРОБЛЕМА

Когда я пытаясь выбрать эту функцию с помощью приведенного ниже кода, она работает нормально.

select falc_app.get_column_names_for_a_table(usertable);

, но когда я пытаюсь использовать это внутри кода другой функции, происходит следующее: скорее не разрешается имя столбца, а разрешается к выводу ниже, есть ли способ получить такое же поведение, как при выборе функции с помощью оператора select

|| quote_nullable(col_username) || ',' || quote_nullable(col_password) ||......

1 Ответ

1 голос
/ 04 февраля 2020

Вы можете упростить функцию, чтобы избавиться от конкатенации.

Также функция возвращает не таблицу, а один текст. Это зависит от вас, чтобы изменить его.

CREATE OR REPLACE FUNCTION falc_app.get_quoted_column_names_for_a_table(sel_table_name text)
  RETURNS TABLE(
    script text
  )
AS  
 $$
    SELECT STRING_AGG(QUOTE_NULLABLE(column_name),',' ORDER BY COLUMNS.ordinal_position ) as script
    FROM information_schema.COLUMNS
    WHERE COLUMNS.table_schema = 'falc_app'
        AND COLUMNS.TABLE_NAME = sel_table_name;
 $$
LANGUAGE sql;   
...