Size: a a a

pgsql – PostgreSQL

2020 May 30

SE

Sergey Evseev in pgsql – PostgreSQL
Коллеги, а в базе zabbix кто-нибудь timescaledb в проде уже ставил? С историей zabbix лучше стал работать? Сжатие использовали уже?
источник

GR

Gubaydullin Ruslan in pgsql – PostgreSQL
Добрый день
не могли бы вы мне помочь
в поле (jsonb) лежит массив чисел [1,2,3]

если бы в поле лежал массив строк ['1','2','3'],
тогда можно было бы выполнить поиск строки '3'

select jsonb_exists_any(field, array['3']) from table

сейчас же получаю ошибку
select jsonb_exists_any(field, array[3]) from table
ERROR: function jsonb_exists_any(jsonb, integer) does not exist

спасибо
источник

Ð

Ð in pgsql – PostgreSQL
вот кстати такие потребности - эталонный образец вреда от жсона, по сравнению с нормальной формой, обсуждали тут
источник

GR

Gubaydullin Ruslan in pgsql – PostgreSQL
select '3' = ANY(ARRAY(SELECT jsonb_array_elements(field)))
from table
источник

GR

Gubaydullin Ruslan in pgsql – PostgreSQL
вот так сработало
источник

Ð

Ð in pgsql – PostgreSQL
а че там план запроса думает на этот счет?
источник

2_

2flower _ in pgsql – PostgreSQL
Gubaydullin Ruslan
Добрый день
не могли бы вы мне помочь
в поле (jsonb) лежит массив чисел [1,2,3]

если бы в поле лежал массив строк ['1','2','3'],
тогда можно было бы выполнить поиск строки '3'

select jsonb_exists_any(field, array['3']) from table

сейчас же получаю ошибку
select jsonb_exists_any(field, array[3]) from table
ERROR: function jsonb_exists_any(jsonb, integer) does not exist

спасибо
пг какой версии, планировщик повесится от вашего запроса
источник

GR

Gubaydullin Ruslan in pgsql – PostgreSQL
10
источник

2_

2flower _ in pgsql – PostgreSQL
а что мешает сделать просто int[]? поиск будет очень быстрый
источник

D

Dubzer in pgsql – PostgreSQL
может ли рандом быть менее рандомным при одновременных запросах?
выбираю случайную строку юзая
SELECT * FROM table ORDER BY random() LIMIT 1
и что-то слишком часто нескольким потокам приходит один результат
источник

РЖ

Роман Жарков... in pgsql – PostgreSQL
По идее нет. Но я считаю каноничным вариант с order by random() desc
источник

V

Valery in pgsql – PostgreSQL
а запросы в разных соединениях или в одном?
источник

V

Valery in pgsql – PostgreSQL
есть подозрение что random() не потокобезопасен
источник

D

Dubzer in pgsql – PostgreSQL
Valery
а запросы в разных соединениях или в одном?
в разных
источник

V

Valery in pgsql – PostgreSQL
тогда возможно, что функция random() не thread safe и её вызов в разных соединениях (процессах в терминах сервера) возвращает один и тот же результат.
источник

D

Dubzer in pgsql – PostgreSQL
Valery
тогда возможно, что функция random() не thread safe и её вызов в разных соединениях (процессах в терминах сервера) возвращает один и тот же результат.
а что с этим делать
источник

D

Dubzer in pgsql – PostgreSQL
я тоже так думал, но никто об этом нигде не писал
источник

DG

Dimitri Grinkevich in pgsql – PostgreSQL
Dubzer
может ли рандом быть менее рандомным при одновременных запросах?
выбираю случайную строку юзая
SELECT * FROM table ORDER BY random() LIMIT 1
и что-то слишком часто нескольким потокам приходит один результат
нескольким потокам из тысячи ? из десяти тысяч ?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dubzer
я тоже так думал, но никто об этом нигде не писал
Я думаю, это потому, что random() и не обещает "качественных" случайных чисел. ;)
Лучше (чем пересказывать, в смысле) приведу цитату из исходного кода (см. src/backend/utils/adt/float.c):
{
 float8    result;
 /* Initialize random seed, if not done yet in this process */
 if (unlikely(!drandom_seed_set))
 {
   /*
    * If possible, initialize the seed using high-quality random bits.
    * Should that fail for some reason, we fall back on a lower-quality
    * seed based on current time and PID.
    */
   if (!pg_strong_random(drandom_seed, sizeof(drandom_seed)))
   {
     TimestampTz now = GetCurrentTimestamp();
     uint64    iseed;
     /* Mix the PID with the most predictable bits of the timestamp */
     iseed = (uint64) now ^ ((uint64) MyProcPid << 32);
     drandom_seed[0] = (unsigned short) iseed;
     drandom_seed[1] = (unsigned short) (iseed >> 16);
     drandom_seed[2] = (unsigned short) (iseed >> 32);
   }
   drandom_seed_set = true;
 }

 /* pg_erand48 produces desired result range [0.0 - 1.0) */
 result = pg_erand48(drandom_seed);
 PG_RETURN_FLOAT8(result);
}
источник

V

Valery in pgsql – PostgreSQL
гм.. pg_erand48 thread safe...
источник