Не выполняется динамический SQL

mwolf
Дата: 11.11.2004 17:57:12
Ни
EXEC SQL CREATE TABLE foo (number integer, ascii char(16));
ни
EXEC alter sequence test RESTART WITH 100;
не работают.
Как вообще работает динамический SQL?

Проблема собственно в том, что надо подправить один сиквенс. Приблизительно так:
alter sequence test_seq
RESTART WITH (select id from some_table where id=10);
То есть начальное значение сиквенса мне надо узнать из таблицы. Как можно подобное реализовать?
4321
Дата: 11.11.2004 18:58:23
не понял вопроса
-зачем динамика под эту задачу? Вы хотите получать имена счетчиков, а потом искать имена таблиц? И все эти строки втыкать в динамическую строку? Если нет - хватит обычного SQL
У меня например так (запускается после частичной заливки дампа):
....
SELECT setval('report_id_seq', max(id)) FROM report;
SELECT setval('persons_id_seq', max(id)) FROM persons;
....

если брать все счетчики
SELECT 
pg_class.relname 
FROM 
pg_class 
WHERE NOT 
pg_class.relname ~ 'pg_.*' AND 
pg_class.relkind ='S' 
ORDER BY 
pg_class.relname 
; 
, то как вы ищете из каких таблиц брать максимумы? (счетчики же не обязательно юзать только как суррогатные ключи. Можно ведь и для иных каких нужд приспособить)

(но если только как ключи) - в этом случае было бы уместно как-то так:
CREATE OR REPLACE FUNCTION ... AS '
DECLARE
  stroka  name;
...
BEGIN
EXECUTE \'SELECT setval(\'\' || stroka || \'\' ....
...
END;
'
  LANGUAGE 'plpgsql' VOLATILE;
или даже еще и || qoute_ident(stroka) ||
mwolf
Дата: 11.11.2004 20:03:10
SETVAL!!!
Я забыл об этой ф-ции!!!!!!!!!