строки БД узнать версию postgres?
SELECT version();
а из подключения к БД можно как-то увидеть размер выделяемой памяти для БД?
типа сколько постгрес жрёт памяти?
штатных средств нет, но можно извратиться ))) select regexp_matches(c, 'VmRSS:\s+[0-9]+\s[a-zA-Z]+') from pg_read_file('/proc/' || pg_backend_pid() || '/status') as status(c); regexp_matches ------------------------------- {"VmRSS: 15924 kB"} сам способ представляет чисто академический интерес, на практике же имеет массу ограничений)))
типо как читать данные потоком с удаленной БД чтобы при большом количестве данных outOFMemory не словит? несколько запросов с limit & offset не подходят потому что данные успевают измениться для клиента это курсор но на сервере он будет сохранять в памяти вcе row как можно устроить потоковую отдачу серверу на postgres?
ну и типа узнать какой лимит памяти на сервере, если есть доступ только к самой БД чтобы не уложить сервак запросами?
не уверен что из постгреса самого это можно сделать 😕
никак не узнать только через внешний мониторинг > на клиенте outOfMemory решается получением данных через курсор а как избежать на сервере? Разделите данные на логические части и вычитывайте/обрабатывайте по частям. Например за час, сутки, месяц. Если обрабатывать все всегда разом, то непонятно как масштабироваться, когда объемы данных в бд будут расти
ну можно было бы читать через limit & offset но на сервере данные меняются и база рабочая блокировку использовать нельзя просто хотелось бы найти решение для сервера чтобы избежать outOfMemory
> несколько запросов с limit & offset не подходят потому что данные успевают измениться В одной SERIALIZABLE / REPEATABLE READ транзакции — не изменятся. > для клиента это курсор но на сервере он будет сохранять в памяти вcе row Извините... кто Вам сказал такую чушь?! ;) > как можно устроить потоковую отдачу серверу на postgres? Copy protocol, если используемое клиентское API это умеет.
в любых БД данные меняются, это нормально - пишите приложение с учетом этого факта.
то есть если я использую курсор после каждой партии на стороне сервера запрос повторяется?
ну с учетом изменения данных только одно решение - один запрос
Что такое "использую курсор осле каждой партии", конкретно?
Я Вам показал "только другое" решение, в первом же сообщении. ;)
В одной SERIALIZABLE / REPEATABLE READ транзакции — не изменятся. - это ?
https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor
SERIALIZABLE / REPEATABLE READ транзакции это я так понимаю тоже самое что и курсор?
На первый взгляд это просто какая-то "клиентская" заморочка, вообще не имеющая отношения к PostgreSQL. Т.е. это Вам не тут надо спрашивать, по-хорошему. Ну или показать log запросов (из лога postgres), которые выдаются в PostgreSQL подобным кодом.
Ничего общего. Это уровни изоляции транзакций.
Обсуждают сегодня