Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Npgsql - скрипт / 25 сообщений из 26, страница 1 из 2
27.07.2015, 22:12
    #39017167
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Npgsql - скрипт
возможно ли динамический запуск такого скрипта, допустим через 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
27.07.2015, 23:09
    #39017193
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Npgsql - скрипт
ViPRos,

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

Да ладно, просто не увидел DO
...
Рейтинг: 0 / 0
29.07.2015, 14:28
    #39018685
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Npgsql - скрипт
есть непонятные вещи
почему этот скрипт без ошибок работает, но не создает форинкеи (а они точно есть и должны быть созданы)
кажется
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
29.07.2015, 15:03
    #39018744
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Npgsql - скрипт
ViPRos,

perform selstr

Код: plpgsql
EXECUTE selstr;
...
Рейтинг: 0 / 0
29.07.2015, 15:25
    #39018773
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Npgsql - скрипт
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
29.07.2015, 15:34
    #39018787
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Npgsql - скрипт
ViPRosqwwq,

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

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

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


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

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


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

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

да не истерю, просто была ожидаемая реакция что в переменной будет агрегирована информация нужная, даже не смотрел, что там :)
попробую через функцию эту (постгри не знаю, просто пытаюсь точечно перевести код МССКЛ на эквивалентный в Постгри)
спасибо
...
Рейтинг: 0 / 0
29.07.2015, 15:45
    #39018801
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Npgsql - скрипт
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
29.07.2015, 16:00
    #39018820
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Npgsql - скрипт
qwwq,

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

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

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

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


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

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

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

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

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


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

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

да, пойми, вроде простая штука, пробежаться по данным и составить текст для batch sql, а тут кругом засада
если бы думал, что делаю что то сложное, то конечно спросил бы у спецов - как это можно делать
...
Рейтинг: 0 / 0
29.07.2015, 19:17
    #39019044
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Npgsql - скрипт
вот чем лучше пользоваться ANSI Catalog или PG_Catalog?
...
Рейтинг: 0 / 0
29.07.2015, 20:02
    #39019056
p2.
p2.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Npgsql - скрипт
ViPRosчем лучше пользоватьсякритерии лучшести?
...
Рейтинг: 0 / 0
29.07.2015, 20:10
    #39019062
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Npgsql - скрипт
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
29.07.2015, 20:13
    #39019063
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Npgsql - скрипт
вот Вася долбаный, хорошо хоть увидел :)
...
Рейтинг: 0 / 0
29.07.2015, 21:41
    #39019096
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Npgsql - скрипт
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
29.07.2015, 23:25
    #39019133
p2.
p2.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Npgsql - скрипт
ViPRos мозгов не хватаетхотя бы подумать, как парсеру отличать окончание строкового литерала, когда внутри него эти ограничители строк понатыканы.
ну хотя бы текст ошибки научиться воспринимать.
...
Рейтинг: 0 / 0
30.07.2015, 01:41
    #39019153
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Npgsql - скрипт
p2.,

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


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