как ссылаться на переменную метки времени в функции pgsql с оператором select

Привет, я пытаюсь написать функцию pgsql, которая выполняет копирование данных таблицы в файл csv, и у меня возникают трудности с использованием значения переменной внутри функции, как показано ниже:

CREATE OR REPLACE  FUNCTION test3() RETURNS void
    LANGUAGE plpgsql
    AS $$
DECLARE
_currenttime timestamp := now();
BEGIN
copy (SELECT * FROM table1 WHERE createdtime < _currenttime - INTERVAL '1 days') TO '/tmp/table1.csv';
END
$$;

Я получаю ошибку при доступе к функции:

select test3();

ОШИБКА: столбец "_currenttime" не существует СТРОКА 1: ... py (ВЫБЕРИТЕ * ИЗ таблицы 1, ГДЕ createdtime ‹ _currentti... ^ ЗАПРОС: скопировать (ВЫБЕРИТЕ * ИЗ bpminstance ГДЕ createdtime ‹ _currenttime - ИНТЕРВАЛ '1 дней') TO ' /tmp/table1.csv'

Прошу вашей любезной помощи.


person Rajesh Chandrashekar    schedule 12.10.2015    source источник
comment
в выводе ошибки bpminstance ссылается на table1   -  person Rajesh Chandrashekar    schedule 12.10.2015
comment
попробуй copy (SELECT * FROM table1 WHERE createdtime < NOW() - interval '1 day') TO '/tmp/table1.csv';   -  person Vivek S.    schedule 12.10.2015
comment
Спасибо, я попробовал это, но у меня есть другие операторы, за которыми следуют это, поэтому мне нужно ссылаться на эту переменную в скрипте.   -  person Rajesh Chandrashekar    schedule 12.10.2015
comment
У меня есть серия команд копирования, основанная на текущей метке времени, которую я храню в переменной, которая мне нужна для сбора данных. так что все таблицы дают данные на основе этой переменной. И я попробовал ваше предложение и получил ошибку: \i /home/cust/test3.sql psql:/home/cust/createFunction_3.sql:69: ОШИБКА: синтаксическая ошибка в или около: = LINE 15: ... FROM table1 WHERE createdtime ‹ _currenttime := NOW() -... Я новичок в добавлении сообщений в stackoverflow, просто знакомлюсь с вещами, простите за форматирование.   -  person Rajesh Chandrashekar    schedule 12.10.2015


Ответы (1)


person    schedule
comment
Я попробовал это, нет ошибки при выполнении функции, но данные не были скопированы в CSV-файл, есть идеи? Но если я выполню эту команду отдельно, я получу результат - person Rajesh Chandrashekar; 12.10.2015
comment
Хорошо, используя ‹ _currenttime, получите следующую ошибку: select test3(); ВНИМАНИЕ: текущее время для архивирования — 2015-10-11 18:01:17.461973 ОШИБКА: столбец _currenttime не существует LINE 1: ...py (SELECT * FROM table1 WHERE createdtime ‹ _currentti... ^ QUERY: копировать (SELECT * ОТ table1 ГДЕ createdtime ‹ _currenttime) TO '/tmp/table1.csv' КОНТЕКСТ: функция PL/pgSQL test3() строка 8 в операторе SQL - person Rajesh Chandrashekar; 12.10.2015
comment
Используя '||_currenttime||', выберите test3(); ВНИМАНИЕ: текущее время для архивирования: 2015-10-11 17:59:51.982964 ОШИБКА: недопустимый синтаксис ввода для временной метки типа: ||_currenttime|| LINE 1: ...py (SELECT * FROM table1 WHERE createdtime ‹ '||_curren... ^ QUERY: copy (SELECT * FROM table1 WHERE createdtime ‹ '||_currenttime||') TO '/tmp/table1.csv ' КОНТЕКСТ: функция PL/pgSQL test3(), строка 8 в операторе SQL - person Rajesh Chandrashekar; 12.10.2015
comment
Переменная, кажется, разрешается, но с некоторыми ошибками, как показано ниже: select test3(); ВНИМАНИЕ: текущее время для архивирования 11.10.2015 19:10:37.398026 ОШИБКА: синтаксическая ошибка в или около 19 LINE 1: ...* FROM table1 WHERE createdtime ‹ 11.10.2011 19:10:37.3... ^ ЗАПРОС: скопировать (SELECT * FROM table1 WHERE createdtime ‹ 2015-10-11 19:10:37.398026) TO '/tmp/table1.csv' CONTEXT: функция PL/pgSQL test3(), строка 10 в операторе EXECUTE - person Rajesh Chandrashekar; 12.10.2015