powered by simpleCommunicator - 2.0.19     © 2024 Programmizd 02
Map
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / помогите с процедурой
25 сообщений из 37, страница 1 из 2
помогите с процедурой
    #39705782
dburtsev1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ETL процесс должен удалить старые данные из некоторых таблиц.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CREATE PROCEDURE delete_staging_data()
LANGUAGE plpgsql
AS 
DECLARE tableName varchar(63);
DECLARE staging_cursor CURSOR 
FOR SELECT table_name FROM information_schema.tables 
WHERE table_type = 'BASE TABLE' AND table_schema NOT IN ('pg_catalog', 'information_schema') AND table_name LIKE '_\_%'; 

BEGIN
OPEN staging_cursor;

LOOP
FETCH NEXT FROM staging_cursor INTO tableName;

EXIT WHEN NOT FOUND;

EXECUTE 'DELETE FROM TABLE ' || tableName;
COMMIT;

END LOOP;

CLOSE staging_cursor;
END;


ошибки:
psql:C:/Work/SQL/PgStoredProc.sql:4: ERROR: syntax error at or near "CREATE"
LINE 1: CREATE PROCEDURE delete_staging_data()
^
psql:C:/Work/SQL/PgStoredProc.sql:7: ERROR: DECLARE CURSOR can only be used in transaction blocks
psql:C:/Work/SQL/PgStoredProc.sql:10: ERROR: syntax error at or near "OPEN"
LINE 2: OPEN staging_cursor;
^
psql:C:/Work/SQL/PgStoredProc.sql:13: ERROR: syntax error at or near "LOOP"
LINE 1: LOOP
^
psql:C:/Work/SQL/PgStoredProc.sql:15: ERROR: syntax error at or near "EXIT"
LINE 1: EXIT WHEN NOT FOUND;
^
psql:C:/Work/SQL/PgStoredProc.sql:17: ERROR: syntax error at or near "'DELETE FROM TABLE '"
LINE 1: EXECUTE 'DELETE FROM TABLE ' || tableName;
^
psql:C:/Work/SQL/PgStoredProc.sql:18: WARNING: there is no transaction in progress
psql:C:/Work/SQL/PgStoredProc.sql:20: ERROR: syntax error at or near "LOOP"
LINE 1: END LOOP;
^
psql:C:/Work/SQL/PgStoredProc.sql:22: ERROR: cursor "staging_cursor" does not exist
psql:C:/Work/SQL/PgStoredProc.sql:23: WARNING: there is no transaction in progress

откуда копать?
...
Рейтинг: 0 / 0
помогите с процедурой
    #39705785
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dburtsev1,

Нужно попробовать так:

Код: plsql
1.
2.
3.
DECLARE
   tableName varchar(63);
   staging_cursor CURSOR ...
...
Рейтинг: 0 / 0
помогите с процедурой
    #39705795
dburtsev1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CREATE PROCEDURE delete_staging_data()
LANGUAGE plpgsql
AS 
DECLARE
  tableName varchar(63);
  staging_cursor CURSOR FOR SELECT table_name FROM information_schema.tables 
   WHERE table_type = 'BASE TABLE' AND table_schema NOT IN ('pg_catalog', 'information_schema') AND table_name LIKE '_\_%'; 

BEGIN
OPEN staging_cursor;

LOOP
FETCH NEXT FROM staging_cursor INTO tableName;

EXIT WHEN NOT FOUND;

EXECUTE 'DELETE FROM TABLE ' || tableName;
COMMIT;

END LOOP;

CLOSE staging_cursor;
END; 


psql:C:/Work/SQL/PgStoredProc.sql:5: ERROR: syntax error at or near "CREATE"
LINE 1: CREATE PROCEDURE delete_staging_data()
^
psql:C:/Work/SQL/PgStoredProc.sql:7: ERROR: syntax error at or near "staging_cursor"
LINE 1: staging_cursor CURSOR FOR SELECT table_name FROM information...
^
psql:C:/Work/SQL/PgStoredProc.sql:10: ERROR: syntax error at or near "OPEN"
LINE 2: OPEN staging_cursor;
^
psql:C:/Work/SQL/PgStoredProc.sql:13: ERROR: syntax error at or near "LOOP"
LINE 1: LOOP
^
psql:C:/Work/SQL/PgStoredProc.sql:15: ERROR: syntax error at or near "EXIT"
LINE 1: EXIT WHEN NOT FOUND;
^
psql:C:/Work/SQL/PgStoredProc.sql:17: ERROR: syntax error at or near "'DELETE FROM TABLE '"
LINE 1: EXECUTE 'DELETE FROM TABLE ' || tableName;
^
psql:C:/Work/SQL/PgStoredProc.sql:18: WARNING: there is no transaction in progress
psql:C:/Work/SQL/PgStoredProc.sql:20: ERROR: syntax error at or near "LOOP"
LINE 1: END LOOP;
^
psql:C:/Work/SQL/PgStoredProc.sql:22: ERROR: cursor "staging_cursor" does not exist
psql:C:/Work/SQL/PgStoredProc.sql:23: WARNING: there is no transaction in progress
...
Рейтинг: 0 / 0
помогите с процедурой
    #39705796
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dburtsev1ETL процесс должен удалить старые данные из некоторых таблиц.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE PROCEDURE delete_staging_data()
LANGUAGE plpgsql
AS  --  body -- ono text 
'
DECLARE tableName varchar(63);
DECLARE staging_cursor CURSOR 
FOR SELECT table_name FROM information_schema.tables 
WHERE table_type = ''BASE TABLE'' AND table_schema NOT IN (''pg_catalog'', ''information_schema'') AND table_name LIKE ''_\_%''; 
...
END;
' -- end of body



туда копать
...
Рейтинг: 0 / 0
помогите с процедурой
    #39705823
dburtsev1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
CREATE PROCEDURE delete_staging_data()
LANGUAGE plpgsql
AS 
'
DECLARE
  tableName varchar(63);
  staging_cursor CURSOR FOR SELECT table_name FROM information_schema.tables 
   WHERE table_type = ''BASE TABLE'' AND table_schema NOT IN (''pg_catalog'', ''information_schema'') AND table_name LIKE ''_\_%''; 

BEGIN
OPEN staging_cursor;

LOOP
FETCH NEXT FROM staging_cursor INTO tableName;

EXIT WHEN NOT FOUND;

EXECUTE ''DELETE FROM TABLE '' || tableName;
COMMIT;

END LOOP;

CLOSE staging_cursor;
END; 
'



psql:C:/Work/SQL/PgStoredProc.sql:25: ERROR: syntax error at or near "CREATE"
LINE 1: CREATE PROCEDURE delete_staging_data()
^
...
Рейтинг: 0 / 0
помогите с процедурой
    #39705834
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dburtsev1,

Ой-вей, таки Вам нужно прочитать про Значок байтового байта (BOM) ...
...
Рейтинг: 0 / 0
помогите с процедурой
    #39705835
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dburtsev1,

И пора перейти на pgAdmin версии 4, потому что https://postgrespro.ru/list/id/E1d82yj-0001U4-6w@gothos.postgresql.org]таки да .
...
Рейтинг: 0 / 0
помогите с процедурой
    #39705847
dburtsev1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAP,
т.е. про psql.exe можно забыть?

я пробовал использовать Aginity Workbench for Redshift:
ERROR: 42601: syntax error at or near "PROCEDURE"

может с кодом что то не так?

буду копать pgAdmin
...
Рейтинг: 0 / 0
помогите с процедурой
    #39705850
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dburtsev1Andy_OLAP,
т.е. про psql.exe можно забыть?

я пробовал использовать Aginity Workbench for Redshift:
ERROR: 42601: syntax error at or near "PROCEDURE"

может с кодом что то не так?

буду копать pgAdmin

У вас проблема в файле с функцией.
Там левый треш на несколько байтов в начале вот и не получается файл загрузить.
Используйте нормальные текстовые редакторы vim например... :)
Можете легко hex view сделать на ваш файл и увидеть.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
помогите с процедурой
    #39705852
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Bogukнормальные текстовые редакторы vim например... :)

Это кошерная шутка, спасибо, я посмеялся :)
...
Рейтинг: 0 / 0
помогите с процедурой
    #39705866
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dburtsev1,

Если вы не тестируете вышедшую сегодня 11beta4, то `CREATE PROCEDURE` — нету. До 11-й версии только функции.
...
Рейтинг: 0 / 0
помогите с процедурой
    #39705871
dburtsev1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorov,

Server PostgreSQL 9.6.8 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.9.3, 64-bit
psql.exe 9.6.10.18234
...
Рейтинг: 0 / 0
помогите с процедурой
    #39705874
dburtsev1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

спасибо, я поменял кодировку при помощи notepad++

psql:C:/Work/SQL/PgStoredProc.sql:25: ERROR: syntax error at or near "PROCEDURE"
LINE 1: CREATE PROCEDURE delete_staging_data()
^
...
Рейтинг: 0 / 0
помогите с процедурой
    #39705879
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dburtsev1vyegorov,

Server PostgreSQL 9.6.8 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.9.3, 64-bit
psql.exe 9.6.10.18234
Замените слово PROCEDURE на FUNCTION и постепенно отвыкайте от синтаксиса T-SQL.
Я то думал, у Вас 11-я, а у Вас 9-ка.
Вот здесь хорошие примеры для Вашей версии.
...
Рейтинг: 0 / 0
помогите с процедурой
    #39705881
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dburtsev1,

Во вторник выложили 10.5.2, если таки есть желание связать с компанией Postgres Professional и потратить немного шекелей на техподдержку - лучше это сделать, если система у Вас боевая, а не тестовая.
...
Рейтинг: 0 / 0
помогите с процедурой
    #39705891
dburtsev1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня Amazon Aurora.
...
Рейтинг: 0 / 0
помогите с процедурой
    #39705913
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dburtsev1у меня Amazon Aurora.

Хочу заметить что это не postgres а только им притворяется.
И о таком имеет смысл писать с самого начала (даже о RDS который все таки куда больше на нативный postgres похож тоже надо писать в начале вопроса).
...
Рейтинг: 0 / 0
помогите с процедурой
    #39706084
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dburtsev1Andy_OLAP,
т.е. про psql.exe можно забыть?

я пробовал использовать Aginity Workbench for Redshift:
ERROR: 42601: syntax error at or near "PROCEDURE"

может с кодом что то не так?

буду копать pgAdmin

оно не понимает еще слова "процедура"
...
Рейтинг: 0 / 0
помогите с процедурой
    #39706238
dburtsev1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

Server PostgreSQL 9.6.8 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.9.3, 64-bit
...
Рейтинг: 0 / 0
помогите с процедурой
    #39706261
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dburtsev1Maxim Boguk,

Server PostgreSQL 9.6.8 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.9.3, 64-bit

Если у вас Aurora то это не Postgres ни внутри ни по большому делу снаружи. Точка.
На заборе что угодно можно написать а по факту за ним дрова лежать будут.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
помогите с процедурой
    #39706318
dburtsev1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

вы путаете c Amazon Redshift

Amazon Aurora is a hosted relational database service developed and offered by Amazon since October 2014.
Aurora is available as part of the Amazon Relational Database Service (RDS). Although it is a proprietary technology, it offers MySQL compatible service since its release and PostgreSQL compatible since October 2017

The Amazon Aurora database engine is fully compatible with existing MySQL and PostgreSQL open source databases, and adds compatibility for new releases regularly. This means you can easily migrate MySQL or PostgreSQL databases to Aurora using standard MySQL or PostgreSQL import/export tools or snapshots.
...
Рейтинг: 0 / 0
помогите с процедурой
    #39706335
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dburtsev1,

Вы оба правы, и Вы, и Максим. Вы таки учтите, что еще в мае нужно было,после того как отработает AWS Database Migration Service, руками делать select setval(<sequence name>, <current last_val>, false) - при импорте обычных postgresql баз в Aurora PostgreSQL, сейчас все мелочи ликвидированы, совместимость с 9.6 есть, но с 10-кой совместимости по-моему нет.
Возможно, я ошибаюсь.
Но я это к тому, что команда postgresql может выпустить на 9-ку какой-нибудь патч, затыкающий неправильную работу, который команда Amazon у себя внедрит с опозданием.
Или работа исправлена на версии 10, все Вам будут советовать установить более свежую версию, а тут выяснится, что Вы сидите в амазоне. Такие вещи, как верно заметил Максим, нужно писать в первую очередь, типа "у меня aurora postgresql 1.2, совместимая с обычной версией 9.6.8", это упрощает помощь не только Вам, но и другим участникам форума, которые прочитают Вашу проблему и подумают, что у них такая же, и предложенное решение поможет и им - а не факт.
...
Рейтинг: 0 / 0
помогите с процедурой
    #39707417
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorovdburtsev1,

Если вы не тестируете вышедшую сегодня 11beta4, то `CREATE PROCEDURE` — нету. До 11-й версии только функции.

вроде как и в 11beta 3 есть.
...
Рейтинг: 0 / 0
помогите с процедурой
    #39794316
korva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот вы пишете что в 11 можно процедуры - у меня 11.2, а при попытке:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE PROCEDURE insert_data() 
LANGUAGE SQL 
AS  
$$ 
BEGIN 
  INSERT INTO tt.debuginfo(command, errtext) 
    VALUES ('\xaabbccddee'::bytea, 'proc test' || random()::text);
END;
$$



вываливается:
Код: plaintext
1.
2.
3.
4.
ERROR:  syntax error at or near "PROCEDURE"
СТРОКА 1: CREATE PROCEDURE insert_data() LANGUAGE SQL AS  $$ BEGIN INS...
                 ^
SQL state: 42601
Character: 8

Пробовал из pgAdmin4, psql,pgcli

Что делать? Мне нужно управление транзакциями, а оно только в процедурах, которых нет (похоже)
...
Рейтинг: 0 / 0
помогите с процедурой
    #39794390
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
korvaВот вы пишете что в 11 можно процедуры - у меня 11.2, а при попытке:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE PROCEDURE insert_data() 
LANGUAGE SQL 
AS  
$$ 
BEGIN 
  INSERT INTO tt.debuginfo(command, errtext) 
    VALUES ('\xaabbccddee'::bytea, 'proc test' || random()::text);
END;
$$



вываливается:
Код: plaintext
1.
2.
3.
4.
ERROR:  syntax error at or near "PROCEDURE"
СТРОКА 1: CREATE PROCEDURE insert_data() LANGUAGE SQL AS  $$ BEGIN INS...
                 ^
SQL state: 42601
Character: 8

Пробовал из pgAdmin4, psql,pgcli

Что делать? Мне нужно управление транзакциями, а оно только в процедурах, которых нет (похоже)

А что у вас select version(); говорит на базе?
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / помогите с процедурой
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]