PostgreSQL хранит пути для ссылки в скриптах - PullRequest
0 голосов
/ 21 мая 2010

Я пытаюсь найти подходящее место для хранения системного пути в PostgreSQL.

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

Команда COPY:

COPY employee_scheduler.countries (code, name)
    FROM get_csv_path('countries.csv')
    WITH CSV;

Определение функции:

CREATE OR REPLACE FUNCTION
    employee_scheduler.get_csv_path(IN file_name VARCHAR(50))
    RETURNS VARCHAR(250) AS $$
DECLARE
    path VARCHAR(200) := E'C:\\Brian\\Work\\employee_scheduler\\database\\csv\\';
    file_path VARCHAR(250) := '';
BEGIN
   file_path := path || file_name;
   RETURN file_path;
END;
$$ LANGUAGE plpgsql;

Если у кого-то есть иное представление о том, как этого добиться, я открыт для предложений.

UPDATE:

Я получаю ошибку:

ОШИБКА: синтаксическая ошибка в или около "employee_scheduler" ЛИНИЯ 12: ОТ employee_scheduler.get_csv_path ('country.csv')

Я безуспешно пробовал следующие утверждения:

COPY employee_scheduler.countries (code, name)
    FROM employee_scheduler.get_csv_path('countries.csv')
    WITH CSV;

COPY employee_scheduler.countries (code, name)
    FROM (employee_scheduler.get_csv_path('countries.csv'))
    WITH CSV;

COPY employee_scheduler.countries (code, name)
    FROM (SELECT * FROM employee_scheduler.get_csv_path('countries.csv'))
    WITH CSV;

Я начинаю думать, что то, как я пытаюсь достичь этого, невозможно. У кого-нибудь еще есть идеи, как этого добиться? Я мог бы просто жестко закодировать путь везде, если я хочу использовать оператор копирования ...

Спасибо за любую помощь.

Ответы [ 2 ]

1 голос
/ 23 мая 2010

Это не правильный путь.Вызов функции в команде «Копировать» не поможет.

Создайте функцию a, как указано ниже, чтобы сделать ее работоспособной: CREATE OR REPLACE FUnction copy_data (текст имени файла) возвращает int как $$ декларирует текст cmd;Начать cmd: = 'копировать test_copy из' || '' '' || get_csv (имя файла) || '' '' || 'с разделителем '||' '' '||', '||' '' '||'; ';выполнить cmd return 1;Конец;$$ language plpgsql;

0 голосов
/ 22 мая 2010

Ваша функция работает нормально. Тем не менее, вам нужно сказать employee_scheduler.get_csv_path('countries.csv') вместо просто get_csv_path('countries.csv') (если я не ошибаюсь). Попробуйте это в psql и убедитесь, что оно работает:

=> SELECT employee_scheduler.get_csv_path('countries.csv');
                        get_csv_path                         
-------------------------------------------------------------
 C:\Brian\Work\employee_scheduler\database\csv\countries.csv
(1 row)
...