@proRuby

Страница 431 из 1594
I
09.02.2017
20:03:49
там, вроде, отдельно гемы для таких радостей

Дмитрий
09.02.2017
20:04:04
используя fetch all in <unnamed portal 1>; fetch all in <unnamed portal2>; в общем возращется только один курсор

I
09.02.2017
20:04:53
а, в обоих случаях одинаковый?

Дмитрий
09.02.2017
20:05:27
вроде последний приходит или первый

Google
I
09.02.2017
20:05:46
можно попробовать взять гем для работы с курсорами, кстати типа такого https://github.com/afair/postgresql_cursor

а вот unnamed portal'ы вот эти, это то, что функция с курсорами вернет?

Дмитрий
09.02.2017
20:07:41
ага. В простом случае возращется один unnamed portal

I
09.02.2017
20:07:48
а так - можно же возвращать SETOF курсоров из функции

или так и сделано?

Дмитрий
09.02.2017
20:10:46
переезжаем из mssql в postgres. Так-то проект на с#, там с этим проблем нет. Хотел тестировать результаты хранимок используя ruby и rspec.

SETOF что это? Как-то поможет два результата получить с одного вызова храники?

I
09.02.2017
20:14:33
ну вот из PG доки примерчик

CREATE FUNCTION myfunc(refcursor, refcursor) RETURNS SETOF refcursor AS $$ BEGIN OPEN $1 FOR SELECT * FROM table_1; RETURN NEXT $1; OPEN $2 FOR SELECT * FROM table_2; RETURN NEXT $2; END; $$ LANGUAGE plpgsql; -- need to be in a transaction to use cursors. BEGIN; SELECT * FROM myfunc('a', 'b'); FETCH ALL FROM a; FETCH ALL FROM b; COMMIT;

функция возвращает setof курсоров по сути

Дмитрий
09.02.2017
20:16:10
попробую завтра на работе, спасибо. Надеюсь есть шанс)

I
09.02.2017
20:16:42
если что - пишите)

Дмитрий
09.02.2017
20:16:53
отпишусь завтра

Google
Dmitry
09.02.2017
20:19:53
извините что влезаю, но мне интересно касательно хранимок. А храните ли вы их в системе контроля версий? Или они только в БД лежат?

Дмитрий
09.02.2017
20:20:11
храним в системе контроля версий

Setof один объединенный курсор вернет?

Dmitry
09.02.2017
20:20:53
а обновления как накатываете миграциями (через CI)? или руками?

I
09.02.2017
20:21:19
Setof один объединенный курсор вернет?
просто set of records будет на выходи

Дмитрий
09.02.2017
20:22:30
инсталлятор серверной части

I
09.02.2017
20:22:40
оу

ну наследие .NET, видимо

Дмитрий
09.02.2017
20:25:42
как-то же нужно поддерживать клиентов от версии к версии

http://stackoverflow.com/questions/40687123/how-get-multiple-resultset-cursors-with-django-and-postgresql

похоже на мой вариант только на python

I
09.02.2017
20:49:20
It's unanswered :c

Дмитрий
09.02.2017
21:26:26
create table dbo.users( id integer, name varchar(100), email varchar(50), is_active integer ); insert into dbo.users(id,name,email,is_active) select 1,'one', 'one@mail.com', 1 union all select 2,'two', 'two@mail.com', 0 union all select 3,'three', 'three@mail.com', 1 ; CREATE OR REPLACE FUNCTION dbo.test_get_users(userID integer) RETURNS SETOF refcursor AS $$ DECLARE ref1 refcursor; ref2 refcursor; ref3 refcursor; BEGIN OPEN ref1 FOR OPEN ref2 FOR SELECT id FROM dbo.users WHERE is_active=1; RETURN next ref2; OPEN ref3 FOR SELECT * FROM dbo.users WHERE id = userID; RETURN next ref3; RETURN; END; $$ LANGUAGE plpgsql;

это нужно на postgres выполнить

require 'pg' conn = PG.connect(:dbname => 'rev_1604',:user => 'postgres', :password => 'postgres', :host => 'localhost') query = «~QUERY SELECT dbo.test_get_users(1); FETCH ALL IN "<unnamed portal 1>"; FETCH ALL IN "<unnamed portal 2>"; FETCH ALL IN "<unnamed portal 3>"; QUERY res = conn.exec(query) res.each do |row| puts row end

I
09.02.2017
21:27:12
круто, есть что потестить)

Дмитрий
09.02.2017
21:27:15
unnamed portal 3 возвращается

http://trentrichardson.com/2012/01/04/return-multiple-result-sets-with-php-and-postgresql-functions/ пример отсюда

I
09.02.2017
21:28:51
вот к этому у меня вопрос

OPEN ref1 FOR OPEN ref2 FOR SELECT id FROM dbo.users WHERE is_active=1; RETURN next ref2;

Google
Дмитрий
09.02.2017
21:29:10
почему?

I
09.02.2017
21:29:35
а что тут делается?)

Дмитрий
09.02.2017
21:30:07
я скопировал и выполнил

I
09.02.2017
21:30:12
мы открывает первый курсор и суем в него query в которой мы открываем второй курсор и выполняет select ***

а, оно работает в sql, да?

ща тогда проверю

Дмитрий
09.02.2017
21:30:42
да

по одному если выполнять FETCH ALL IN "<unnamed portal 1>";

работает

а если все три то только третий возращается

I
09.02.2017
21:32:12
не, у меня не работает =)

как я и говорил, сыпется на OPEN ref2

I
09.02.2017
21:32:38
там не все скопировал)

посмотри внимательно)

Дмитрий
09.02.2017
21:33:28
пардон

ща

I
09.02.2017
21:34:17
да я уже оттуда взял

Дмитрий
09.02.2017
21:34:38
когда копипастил чето натворилось)

в бд нормальный вариант

dade@hp:~/projects$ ruby ./pspg.rb {"id"=>"1", "name"=>"one", "email"=>"one@mail.com", "is_active"=>"1"}

Google
I
09.02.2017
21:36:24
кстати, а мне выдает cursor "<unnamed portal 1>" does not exist

Дмитрий
09.02.2017
21:36:58
если в pgAdmin то да. т.к. в одном конекшене

и после каждого выполнения на единицу увеличивается

открой новый конекшен и выполни

I
09.02.2017
21:38:09
э, еще один коннекшен из руби? зачем?

Дмитрий
09.02.2017
21:38:32
из руби нет

I
09.02.2017
21:38:38
я из руби запускаю)

Дмитрий
09.02.2017
21:38:46
ааа

Admin
ERROR: S client not available

I
09.02.2017
21:39:01
надо conn.transaction

https://github.com/ged/ruby-pg/blob/master/sample/cursor.rbhttps://github.com/ged/ruby-pg/blob/master/sample/cursor.rb

Дмитрий
09.02.2017
21:49:51
круто!!!спасибо!

только как получить количество unnamed portal?

которое возвращает хранимка

I
09.02.2017
21:50:59
какой именно сейчас?

я вот смотрю на то, что там возвращается в exec функции

там возвращаются 3 портала как раз

p conn.exec("select test_user_fun(1)").to_a

Дмитрий
09.02.2017
21:52:41
ruby у меня пока примитивный

I
09.02.2017
21:53:09
да ничего страшного а почему руби, кстати?

Google
I
09.02.2017
21:53:13
а не тот же питон

Дмитрий
09.02.2017
21:57:46
изучать начал два года назад, применить негде

понравился язык

require 'pg' query = «~QUERY SELECT dbo.test_get_users(1); QUERY conn = PG.connect(:dbname => 'rev_1604',:user => 'postgres', :password => 'postgres', :host => 'localhost') conn.transaction do portals = conn.exec(query).to_a portals.each do |n| conn.exec("FETCH ALL IN \"#{n['test_get_users']}\";").each do |res| puts res end end end

типа такого получается

I
09.02.2017
22:04:25
да, работает?

Дмитрий
09.02.2017
22:04:32
да

все выводит

I
09.02.2017
22:04:39
ну и хорошо)

Дмитрий
09.02.2017
22:05:15
?

где плюсик поставить?

I
09.02.2017
22:05:45
нигде, тут нет кармаботов) обращайся, если что-то еще понадобится)

Дмитрий
09.02.2017
22:06:12
ок, спасибо! Теперь можно и спать

Алексей
10.02.2017
06:31:07


Alexander
10.02.2017
06:32:32
Твоё лицо, когда дропнул базу на проде

Alex
10.02.2017
06:32:58
Alexander
10.02.2017
06:33:35
*НЕ НА ТОМ СЕРВЕРЕ
Да я про свой личный опыт ?

Какое у Йорика лицо было не знаю

Алексей
10.02.2017
06:34:09
Да я про свой личный опыт ?
не ты первый не ты последний) потом на ютубе главное стрим устроить с тем как ты все восстановил)

Страница 431 из 1594