powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Npgsql - скрипт
25 сообщений из 26, страница 1 из 2
Npgsql - скрипт
    #39017167
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возможно ли динамический запуск такого скрипта, допустим через ExecuteNonQuery?
или надо обязательно создавать процедуру?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
csql = "declare @count int = 0; " +
                   "if (object_id(N'dbo.[" + typename + "]', N'table') is not null) " +
                   "begin" +
                   "  drop table dbo.[" + typename + "]; " +
                   "end; " +
                   "select @count = object_id from sys.objects where type='TT' and name LIKE N'%TT[_]" + typename + "[_]%'; " +
                   "if (@count <> 0) " +
                   "begin" +
                   "  drop type dbo.[" + typename + "]; " +
                   "end;";
...
Рейтинг: 0 / 0
Npgsql - скрипт
    #39017193
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

DO?
...
Рейтинг: 0 / 0
Npgsql - скрипт
    #39017216
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosзапуск такого скриптакак сей скрипт не запускай,
все равно получишь ... одинаковый результат.
...
Рейтинг: 0 / 0
Npgsql - скрипт
    #39017222
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p2.,

Да ладно, просто не увидел DO
...
Рейтинг: 0 / 0
Npgsql - скрипт
    #39018685
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть непонятные вещи
почему этот скрипт без ошибок работает, но не создает форинкеи (а они точно есть и должны быть созданы)
кажется
Perform (selstr) нифига не делает? (или ошибку тоже уничтожает?)
тут и Exec ничем не помогает
можно конечно все это переписать, но все ж хочется понять в чем дело


Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
do $$ 
declare 
   typename text := 'Шпана'; 
   typeid text := '9f9bde87-6873-43c3-9508-9c6d86efb3ff'; 
   count bigint := 0; selstr text := ''; 
begin 
  select count(*) into count 
  from "ТипСсылкаНаТип"
  where "ТипИД" = cast(typeid as uuid) and 
        "Наименование" <> 'РодительИД' and 
        "Ограничение целостности" = true; 
  if (count > 0) 
  then  
    select selstr || 'Alter table "' || typename  ||   '" Add constraint "' || typename || '_' ||
                     ("Тип"."Наименование") || '{' || "ТипСсылкаНаТип"."Наименование" || '}' ||
                     '" foreign key ("' || "ТипСсылкаНаТип"."Наименование" || '") references "' ||   
                     ("Тип"."Наименование") || '"("ИД") ON DELETE' || 
                     case when "ТипСсылкаНаТип"."Правила удаления" = 'SetNull' then 'SET NULL' 
                     else 'NO ACTION' end || '; '  
    into selstr  
    from "ТипСсылкаНаТип"  
    join "Тип" on "Тип"."ИД" = "ТипСсылкаНаТип"."СсылкаНаТипИД"   
    where "ТипИД" = cast(typeid as uuid) and 
          "ТипСсылкаНаТип"."Наименование" <> 'РодительИД' and 
          "ТипСсылкаНаТип"."Ограничение целостности" = true; 
   end if; 
   select count(*) into count 
   from "ТипОграничение" 
   where "ТипИД" = cast(typeid as uuid) and 
         "Тип ограничения" = 'foreign key'
   if (count > 0) 
   then   
     select cast(selstr as text) || 'Alter table "' || typename || '" Add foreign key (' || 
                                    "Выражение" || ')'
     into selstr from "ТипОграничение" 
     where "ТипИД" = cast(typeid as uuid) and 
           "Тип ограничения" = 'foreign key'; 
   end if; 
   if (selstr <> '') 
   then   
     perform selstr; 
   end if; 
end; $$
...
Рейтинг: 0 / 0
Npgsql - скрипт
    #39018744
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

perform selstr

Код: plpgsql
EXECUTE selstr;
...
Рейтинг: 0 / 0
Npgsql - скрипт
    #39018773
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,

ну я ж написал что EXECUTE не помогла
тут до execute и не доходит
почему то SELSTR пусто????
получается что в Постгри не работает конструкция???

Код: plsql
1.
2.
3.
4.
5.
6.
do $$
declare selstr text = '';
begin
Select selstr || "Тип"."Наименование" into selstr from "Тип";
raise notice '%', selstr;
end; $$



это выдает только имя последней записи
какого хера затирается selstr???
...
Рейтинг: 0 / 0
Npgsql - скрипт
    #39018787
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosqwwq,

ну я ж написал что EXECUTE не помогла
не надо истерик.

perform НЕ имеет никакого отношения к выполнению динамического sql
А execute [plpgsql.execute, не путать с sql.execute] -- команда plpgsql для исполнения строки, созданной как строка.

-- это константа, независимо от скорости нажимания вами кнопочек


Далее, объясните внятно, что у вас не получается

-- вы хотите накопить агрегат строки ? так и пишите
Код: sql
1.
SELECt string_agg(blahblahblah,separator) FROM blahblahblahblah


или копите в цикле. (первое -- предпочтительнее)

что-то иное -- протрите шары, они таки не хрустальные, но вдруг.
...
Рейтинг: 0 / 0
Npgsql - скрипт
    #39018795
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,

да не истерю, просто была ожидаемая реакция что в переменной будет агрегирована информация нужная, даже не смотрел, что там :)
попробую через функцию эту (постгри не знаю, просто пытаюсь точечно перевести код МССКЛ на эквивалентный в Постгри)
спасибо
...
Рейтинг: 0 / 0
Npgsql - скрипт
    #39018801
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosqwwq,
какого хера затирается selstr???
гм. ну вот добавьте STRICT, прочитайте вывод.
помедитируйте.

затем ознакомьтесь таки с RTFM по plpgsql.{SELECT ... INTO [STRICT] }
http://www.postgresql.org/docs/9.4/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-SQL-ONEROW
-- жизнь и наладится.
...
Рейтинг: 0 / 0
Npgsql - скрипт
    #39018820
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,

хрен редки не слаще
либо одна строка либо ошибка, ладно попробую по другому
спс
...
Рейтинг: 0 / 0
Npgsql - скрипт
    #39018828
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кажись тут лучше всего подходит FOR ... LOOP
...
Рейтинг: 0 / 0
Npgsql - скрипт
    #39018854
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosкажись тут лучше всего подходит FOR ... LOOPя вам сразу предложил поциклиться.
это даст вам время освоиться на местности.

а то,что string_agg вычислительно предпочтителен -- это отдельный факт == проблема отсутствия "передачи по ссылке" в plpgsql. его просто надо уметь готовить. И на малых объёмах проблема N*N/2 вас не накроет.
...
Рейтинг: 0 / 0
Npgsql - скрипт
    #39018857
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosпостгри не знаюПрофессиональный форум не самый удачный выбор для демонстрации незнания синтаксиса.
Если нужно что-то сделать, то нанимают профессионала или изучают инструмент, благо документация по postgresql краткая и достаточно внятная.
...
Рейтинг: 0 / 0
Npgsql - скрипт
    #39018864
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosqwwq,

хрен редки не слаще
либо одна строка либо ошибка, ладно попробую по другому
спсво!
вы слишком торопитесь
-- тут вам надо прочитать текст ошибки
, и таки прочитать rtfm
-- и уяснить, что именно так оно (предложение для присвоения одной строки и работает)
-- это там битым текстом написано.

и как результат
-- закрепить знание
, либо взяв агрегат одной строкой
, либо слепив его в цикле однострочных присвоений.


всё ж таки на старости лет скакать галопом поперек реального мира из ожиданий из совсем другой области -- немного несолидно.
...
Рейтинг: 0 / 0
Npgsql - скрипт
    #39018882
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,

ниче, освоюсь
между прочим string_agg тоже не помог, пришлось в цикле
ну тут форум то пусть, вы должны быть рады, что появился нуб :)
ну нет времени, потому и галопом
...
Рейтинг: 0 / 0
Npgsql - скрипт
    #39018987
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosqwwq,

ниче, освоюсь
между прочим string_agg тоже не помог, пришлось в цикле
ну тут форум то пусть, вы должны быть рады, что появился нуб :)
ну нет времени, потому и галопом
чож тут радоваться.
хотите быть нубом -- прочтите "РТФМ для нубов"
"как правильно быть нубом"
или
"как задавать нубские вопросы"

а то ж не два, не полтора
и вопрос по полочкам ленитесь/стремаетесь сформулировать

РТФМ для нубов, черновикМол делал то-то: "раз-два"
получил то-то: "раз-два"
хочу совсем напротив третьего "раз-два"
-- как быть ?


а вы --
авторв туда ткнулся (беме)
в сюда ткнулся (беме)
хочу странного (беме)
-- и сиди -- за вас додумывай, что же вы всё таки пытались, как пытались, чего хотели, чего ожидали

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

да, пойми, вроде простая штука, пробежаться по данным и составить текст для batch sql, а тут кругом засада
если бы думал, что делаю что то сложное, то конечно спросил бы у спецов - как это можно делать
...
Рейтинг: 0 / 0
Npgsql - скрипт
    #39019044
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот чем лучше пользоваться ANSI Catalog или PG_Catalog?
...
Рейтинг: 0 / 0
Npgsql - скрипт
    #39019056
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosчем лучше пользоватьсякритерии лучшести?
...
Рейтинг: 0 / 0
Npgsql - скрипт
    #39019062
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p2.,

какой из них пользовался бы ты для таких вещей

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
 case "Npgsql":
                    csql = "do $$ " +
                           "declare " +
                           "typename text := '" + typename + "'; " +
                           "r record; " +
                           "selstr text := ''; " +
                           "begin " +
                           "  for r in " +
                           "    select conname " +
                           "    from pg_constraint a, pg_class b " +
                           "    where b.relkind = 'r' and " +
                           "    b.relname = 'Вася' and " +
                           "    a.contype = 'f' and " +
                           "    a.conrelid = b.oid) " +
                           "  loop " +
                           "    select selstr || 'Alter table [' || typename  || '] drop constraint [' + r.conname || '] ' into selstr; " +
                           "  end loop; " +
                           "  if (selstr <> '')" +
                           "  then " +
                           "    execute selstr;" +
                           "  end if;" +
                           "end; $$";
                    csql = ConvertCommandTextToNeutralFormat(csql);
...
Рейтинг: 0 / 0
Npgsql - скрипт
    #39019063
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот Вася долбаный, хорошо хоть увидел :)
...
Рейтинг: 0 / 0
Npgsql - скрипт
    #39019096
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

почему то постгри мозгов не хватает анализировать вложенные анонимные блоки - надо то всего то объединить declare и end :(
не работает

Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
do $$ 
declare   
   collist text  = '';   
   old text := 'wwwww';   
   new text := 'wwwww';   
   r record
begin   
  drop table if exist older;   
  select * into older from old;   
  do $$ 
  declare 
    typename text := 'wwwww'; 
    r record; selstr text := ''; 
    begin  
      for r in     
        select conname     
        from pg_constraint a, pg_class b     
        where b.relkind = 'r' and     
              b.relname = typename and     
              a.contype = 'f' and     
              a.confrelid = b.oid   
      loop 
        select selstr || 'Alter table "' || typename  || '" drop constraint "' + r.conname || '" ' 
        into selstr;   
      end loop;   
      if (selstr <> '')  
      then 
        execute selstr;  
      end i
  end; $$  
  do && 
  begin  
    drop table if exist wwwww;   
    drop type if exist wwwww; 
  end; $$  
  do $$ 
  begin  
    Create table "wwwww" ("ИД" UUID not null primary key,"ТипИД" UUID not null,"Иван" UUID null); 
  end;$$  
  for r in      
    select attname        
    from pg_attribute a, pg_class c, pg_class cc, pg_attribute aa      
    where c.relname = old and            
          cc.relname = new and            
          a.attrelid = c.oid and            
          aa.attrelid = cc.oid and            
          a.attname = aa.attname   
  loop     
    select collist || '[' || r.attname || '], ' 
    into collist;   
  end loop;   
  select collist := substring(collist, 1, len(collist) - 1);   
  exec ('insert ' || new || '(' || collist || ') select ' || collist || ' from older');   
  drop table if exist older; 
end; $$
...
Рейтинг: 0 / 0
Npgsql - скрипт
    #39019133
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos мозгов не хватаетхотя бы подумать, как парсеру отличать окончание строкового литерала, когда внутри него эти ограничители строк понатыканы.
ну хотя бы текст ошибки научиться воспринимать.
...
Рейтинг: 0 / 0
Npgsql - скрипт
    #39019153
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p2.,

ладно, перевел уже все
тестирую
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Npgsql - скрипт
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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