Size: a a a

DBA - русскоговорящее сообщество

2021 January 21

Y

YWNWA in DBA - русскоговорящее сообщество
поэтому надо pl/sql block, а не procedure -_-
источник

YS

Yaroslav Schekin in DBA - русскоговорящее сообщество
Serega Carbon
а, ещё вопрос, в таблицу с Составным первичным ключем (ну тот кейс, что выше был) нужно ли добавлять ещё Внешние ключи на эти два поля?
Что такое "на"? Подобные таблицы обычно выглядят как-то так:
CREATE TABLE student_class (
student_id integer NOT NULL REFERENCES student(student_id),
class_id integer NOT NULL REFERENCES class(class_id),
PRIMARY KEY (student_id, class_id)
);
источник

SC

Serega Carbon in DBA - русскоговорящее сообщество
Yaroslav Schekin
Что такое "на"? Подобные таблицы обычно выглядят как-то так:
CREATE TABLE student_class (
student_id integer NOT NULL REFERENCES student(student_id),
class_id integer NOT NULL REFERENCES class(class_id),
PRIMARY KEY (student_id, class_id)
);
а, ну в принципе она так у меня сейчас и выглядит
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Serega Carbon
а, ещё вопрос, в таблицу с Составным первичным ключем (ну тот кейс, что выше был) нужно ли добавлять ещё Внешние ключи на эти два поля?
Нужно
источник

D

Drunk in DBA - русскоговорящее сообщество
Доброго времени суток, на хостинге стоит Mysql 5.1, на локальной машине mysql 8.0 где писала monkey код использовал row_number, прим. (SELECT * FROM (SELECT ROW_NUMBER() over ( ) as 'rownum',xxx)), есть возможность самостоятельно заимплементить row_number в sql? Вломину все запросы с rownum на запросы с переменными переписывать.
источник

c

culnaen in DBA - русскоговорящее сообщество
не могу что-то нагуглить инфу
при извлечении строк из курсора они остаются в курсоре? т.е. я смогу при необходимости получать строки в обе стороны?
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Drunk
Доброго времени суток, на хостинге стоит Mysql 5.1, на локальной машине mysql 8.0 где писала monkey код использовал row_number, прим. (SELECT * FROM (SELECT ROW_NUMBER() over ( ) as 'rownum',xxx)), есть возможность самостоятельно заимплементить row_number в sql? Вломину все запросы с rownum на запросы с переменными переписывать.
Нет, нет возможности
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Drunk
Доброго времени суток, на хостинге стоит Mysql 5.1, на локальной машине mysql 8.0 где писала monkey код использовал row_number, прим. (SELECT * FROM (SELECT ROW_NUMBER() over ( ) as 'rownum',xxx)), есть возможность самостоятельно заимплементить row_number в sql? Вломину все запросы с rownum на запросы с переменными переписывать.
С какого перепуга ты разрабатывал на другой версии сервера?
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
culnaen
не могу что-то нагуглить инфу
при извлечении строк из курсора они остаются в курсоре? т.е. я смогу при необходимости получать строки в обе стороны?
В какие обе? Вторая какая?
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
culnaen
не могу что-то нагуглить инфу
при извлечении строк из курсора они остаются в курсоре? т.е. я смогу при необходимости получать строки в обе стороны?
Курсор - это выполненный запрос, и ты из него строка за строкой выбираешь данные.
Куда обратно можно строки получать, и где они коде должны оставаться?
источник

c

culnaen in DBA - русскоговорящее сообщество
Ilia Zviagin
В какие обе? Вторая какая?
я использовал  FETCH NEXT
могу ли я теперь использовать FETCH PRIOR и пройтись по предыдущим строкам, т.е. по тем же
источник

YS

Yaroslav Schekin in DBA - русскоговорящее сообщество
culnaen
я использовал  FETCH NEXT
могу ли я теперь использовать FETCH PRIOR и пройтись по предыдущим строкам, т.е. по тем же
А СУБД нам надо угадать? ;)
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
culnaen
я использовал  FETCH NEXT
могу ли я теперь использовать FETCH PRIOR и пройтись по предыдущим строкам, т.е. по тем же
Это зависит от СУБД и используемого типа курсора, в некоторых случаях это можно делать.

НО учти пожалуйста, что даже если на данной СУБД и данного запроса есть возможность так делать, это почти наверняка заставит СУБД материализовать набор данных запроса, скопировать его во временное хранилище, а это всегда не бесплатно, особенно опасно это для наборов данных больших объемов.
То есть если у тебя 100 записей, можно и сделать так, а если записей, например, несколько сот тысяч, уже будет тяжко
источник

c

culnaen in DBA - русскоговорящее сообщество
Ilia Zviagin
Это зависит от СУБД и используемого типа курсора, в некоторых случаях это можно делать.

НО учти пожалуйста, что даже если на данной СУБД и данного запроса есть возможность так делать, это почти наверняка заставит СУБД материализовать набор данных запроса, скопировать его во временное хранилище, а это всегда не бесплатно, особенно опасно это для наборов данных больших объемов.
То есть если у тебя 100 записей, можно и сделать так, а если записей, например, несколько сот тысяч, уже будет тяжко
ну я думал уже об этом
записей как раз таки не будет много
Но в общем посмотрю другие варианты, спасибо
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
culnaen
я использовал  FETCH NEXT
могу ли я теперь использовать FETCH PRIOR и пройтись по предыдущим строкам, т.е. по тем же
Некоторые СУБД даже намеренно не реализации такие возможности.
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
culnaen
ну я думал уже об этом
записей как раз таки не будет много
Но в общем посмотрю другие варианты, спасибо
Тогда можно, но тогда можно и тупо в памяти все сохранить и обрабатывать
источник

c

culnaen in DBA - русскоговорящее сообщество
Понял
источник

D

Drunk in DBA - русскоговорящее сообщество
Ilia Zviagin
С какого перепуга ты разрабатывал на другой версии сервера?
Есть костыль тащемтa:
delimiter //
CREATE FUNCTION `impl_rownum`(reset BIT) RETURNS int
   NO SQL
   NOT DETERMINISTIC
    begin
     IF reset THEN
       SET @var := 0;
     ELSE
       SET @var := IFNULL(@var,0) + 1;
     END IF;
     return @var;
    end
    //

Та там написано было, "используем новейшие технологии", меня в проект устаревший вкатили, где никакой документации и "ебис", ну я и накатил себе пока на локалку последнюю версию mysql и накатал запросов, где то оптимизировал, на локалке всё превзошло все ожидания, а потом когда релизить начал - оказалось что там 5.1 версия и что то нужно было всё таки переписать.
Хостинг выделенный, поэтому и все проблемы, mysql обновить не могу, ssh доступа к нему нет, тот же iis тоже старой версии, а нужно  что бы страница грузилась не за 20-30с а за ~5с...
источник

A

Adv0cat in DBA - русскоговорящее сообщество
Drunk
Есть костыль тащемтa:
delimiter //
CREATE FUNCTION `impl_rownum`(reset BIT) RETURNS int
   NO SQL
   NOT DETERMINISTIC
    begin
     IF reset THEN
       SET @var := 0;
     ELSE
       SET @var := IFNULL(@var,0) + 1;
     END IF;
     return @var;
    end
    //

Та там написано было, "используем новейшие технологии", меня в проект устаревший вкатили, где никакой документации и "ебис", ну я и накатил себе пока на локалку последнюю версию mysql и накатал запросов, где то оптимизировал, на локалке всё превзошло все ожидания, а потом когда релизить начал - оказалось что там 5.1 версия и что то нужно было всё таки переписать.
Хостинг выделенный, поэтому и все проблемы, mysql обновить не могу, ssh доступа к нему нет, тот же iis тоже старой версии, а нужно  что бы страница грузилась не за 20-30с а за ~5с...
Всегда можно перенести на другой хостинг субд 😏
источник

К

Какой-то Хмырь... in DBA - русскоговорящее сообщество
У кого-нибудь есть опыт с pgpool?
В частности интересует, как балансировщик читающих запросов поверх кластера патрони.

Вопрос такой - если для нод выставить DISALLOW_TO_FILOVER, то при выходе одной реплики из строя, колом встаёт весь pgpool пока она не вернётся.
Если выставить ALLOW_TO_FAILOVER, то pgpool просто исключает упавшую ноду из балансировки до ручного её вовзрата в балансировщик. Что ставит его раком, когда случается failover/switchover.
источник