@pgsql

Страница 1045 из 1062
Pavel
20.10.2018
18:59:34
например надо связать таблицу Users и таблицу Words

Bogdan
20.10.2018
18:59:49
например надо связать таблицу Users и таблицу Words
или в этом случае UserWords — слова пользователя

Pavel
20.10.2018
19:01:37
а правильно ли я понимаю что таблица будет из трех колонок id|user_id|words_id

Google
Pavel
20.10.2018
19:02:16
и там данные вида 1|1|1 2|1|2 3|1|3 4|2|1 5|2|2 6|2|3

Bogdan
20.10.2018
19:02:22
а вордс какого вида будет? id, userId, word:text ? для быстрого поиска по словам можно сделать втвблицк поле words: text[] -- массив и потом оп нему сделать gin индекс, и будет некое подобие счастья, хотя это сопрный момент, стоит так делать или нет для этого надо понимать как работают gin индексы )

Sergey
20.10.2018
19:03:05
охх, а зачем такое делать? должно с головой хватать 63-х символов
hibernate + embedded + ImplicitNamingStrategyJpaCompliantImpl == внезапно выяснилось, что названия полей перестали влазить в эти диапазоны, а postgresql не ругает на создание таблицы, просто втихоря обрезает поле.

Bogdan
20.10.2018
19:03:49
я бы советовал вам поля по сокращать, если не охота менять код, то хотябы аннотацию навесить, с указанием имени

а для embedded вобще jsonb использовать ?

Pavel
20.10.2018
19:04:27
words у меня тоже будет иметь куча полей, поэтому хочу третью таблицу где буду хранить связи айдишников

Bogdan
20.10.2018
19:07:23
а правильно ли я понимаю что таблица будет из трех колонок id|user_id|words_id
нормально Я бы даже айди не делал, просто два внешних ид CREATE TABLE "UserWords" ( user_id int, word_id int, CONSTRAINT "UserWords_pk" PRIMARY KEY (user_id, word_id) ); CREATE INDEX "UserWords_words" ON "UserWords" (word_id, user_id);

если к юзеру нельзя одно и то-же слово два раза привязывать, то вполне нормально, как по мне

Pavel
20.10.2018
19:09:42
круто, спасибо)

да, к юзеру только одно слово

а по скольку я только дней пять вожусь с бэком и бд, можно мне в кратце пояснить что делает тот констрейнт, а точней что за UserWords_pk, а что делает констрейнт я понял

и вот это CREATE INDEX "UserWords_words" ON "UserWords" (word_id, user_id); для чего

Bogdan
20.10.2018
19:12:05
primary key если ключ не сосотавной, как здесь, то просто пишут id int primary key так как праймари ключ по двум коллонкам, то надо так указывать

Google
Bogdan
20.10.2018
19:12:22
и вот это CREATE INDEX "UserWords_words" ON "UserWords" (word_id, user_id); для чего
чтоыб в обратную сторону по слову искать юзеров быстро

Pavel
20.10.2018
19:12:49
о спасиб

Bogdan
20.10.2018
19:13:35
можно было-бы обойтись только "UserWords_words" ON "UserWords" (word_id) но если две коллонки, то будет Index Only Scan т.е. база будет только с индекса читать, и не искать на диске отдельно строчку

Pavel
20.10.2018
19:14:50
а блин UserWords_pk это ж просто имя констрейнта, верно?

Bogdan
20.10.2018
19:15:00
+

Terminator
20.10.2018
19:24:10
@oldfk будет жить. Поприветствуем!

Bogdan
20.10.2018
19:48:51
За всеми не уследишь :(
попроси начальсво вдыть тебе садовые ножницы ?

по одному пальцу за лишний символ)

Pavel
20.10.2018
21:13:33
подскажите еще плз, что надо сделать что бы в колонке одной таблицы автоматом появлялся айдишник из другой таблицы, и что бы это было двунаправлено

Я таким образом хочу связать метаданные статьи и саму статью Я правильно делаю ?

Bogdan
20.10.2018
21:16:18
1) проинсертил стетью 2) поулчил айди 3) проинсертил метаданные, указав полученый ID см "RETURNING" в доке https://www.postgresql.org/docs/9.5/static/sql-insert.html

тип returning id

Roman
20.10.2018
21:32:16
Правда надо быть с ретёрнингом аккуратнее. А то я как то случайно обернул возвращаемые значения в круглые скобки - и долго не мог понять почему ADO.NET видит там object[]))

Pavel
20.10.2018
21:58:23
а что, id, createdAt, uptadetAt это обязательные поля?

Bogdan
20.10.2018
23:06:19
а что, id, createdAt, uptadetAt это обязательные поля?
если ты гне задал значение по умолчанию и они не null

а что, id, createdAt, uptadetAt это обязательные поля?
у id должен быть тип данных serial

Roman
21.10.2018
05:30:01
Ivan
21.10.2018
06:16:59
Лучше bigserial
Зависит от планируемого количества объектов) Можно и uuid херануть с дуру ?

Roman
21.10.2018
06:18:38
Зависит от планируемого количества объектов) Можно и uuid херануть с дуру ?
Ну дело даже не в количестве данных в самой таблице, а в количестве объектов, которые там могут быть вообще)) У нас вот за 3 года в таблице с остатками int’ы кончились)

Google
Maxim
21.10.2018
11:48:18
Ну я не знаю, откуда больше 4 миллиардов записей будет
nextval для сиквенсов *serial вызывается всегда, инкрементируясь даже когда вставка не происходит. Так что у вас может получиться вот так: https://www.db-fiddle.com/f/8WhShzrhTp3gtGF2S2NEpr/0

Bogdan
21.10.2018
12:12:58
CREATE INDEX CONCURRENTLY Добрый день) Пишу plpgsql блок, для maintnence задачи, надо раз в N дней создавать новый индекс ERROR: CREATE INDEX CONCURRENTLY cannot run inside a transaction block при вызове EXECUTE ddl; решил пробелму так: ddl := $$ CREATE INDEX CONCURRENTLY ..... $$; PERFORM dblink_exec('dbname=' || current_database() ||' user=postgres ',ddl); вопрос, наскольк плохо испоьзовать dblink_exec ? не просто так-же они не дают вызывать CREATE INDEX CONCURRENTLY Но не хотелось писать на баше логику, хотел ограничится чисто plpgsql. просто sql скрипт не подходит, потмоу что мне надо динамически генрировать WHERE условие дялиндекса: format(' ... WHERE message_timestamp > %L::timestamp with time zone ;', last_date); По сути у меня индекс покарывает последние два месяца данных, для быстрых запросов, остальное идет по дургому индексу. такой-себе недо-шардинг.



After the second scan, the index build must wait for any transactions that have a snapshot (see Chapter 13) predating the second scan to terminate. :(

как сделать, чтобы сессия не имела snapshot ? В блоке PLPGSQL вобще нету DML операций оно на блок DO ругается, что-ли?

Andrey
21.10.2018
12:47:58
Снапшот это просто список транзакций выполняюшизся параллельно с текущей плюс xid.

Bogdan
21.10.2018
12:50:54
Снапшот это просто список транзакций выполняюшизся параллельно с текущей плюс xid.
т.е. ЛЮБАЯ старнзакция начатая до начала билда индексов должна завершиться к этому моменту? грустненько

Andrey
21.10.2018
12:52:28
Ну те, с которыми могут быть конфликты только.

Bogdan
21.10.2018
12:54:53
придумал, буду скриптисполнят на базе postgres, а DDL через dblink выполнять на базе рабочей

Петр
21.10.2018
12:57:49
Не вижу дедлока

Bogdan
21.10.2018
12:59:14
Не вижу дедлока
я уже убил сессию, и не сохранил вывод select * from pg_locks (

ну через часа 3-4 узнаем, помог ли запуск через другую базу потмоу что лок возникал не сразу, а на финально стадии бида индекса

Terminator
21.10.2018
16:31:32
Люся будет жить. Поприветствуем!

Bogdan
21.10.2018
17:45:47
Terminator
21.10.2018
18:43:22
Марина Вере... будет жить. Поприветствуем!

Abc будет жить. Поприветствуем!

@Blacklady 77 будет жить. Поприветствуем!

Google
Aleksander
22.10.2018
06:53:33
Ребят не могу сгенерить 10 миллионов уникальных значений цифр 9 позиций которых будут уникальны. Помогите плиз. И чтобы это не были цифры последовательны от 00000001 до 10000000

select distinct substr('121'||floor(random() * 999999999999999)::numeric,1,12)::numeric as qrcode from generate_series(1,10000000)as sn так не подходит появляются не уникальные значения

Александр
22.10.2018
06:58:30
А generate_series если отсортировать в случайном порядке?

Yaroslav
22.10.2018
06:58:38
Ребят не могу сгенерить 10 миллионов уникальных значений цифр 9 позиций которых будут уникальны. Помогите плиз. И чтобы это не были цифры последовательны от 00000001 до 10000000
А куда/как они Вам нужны, эти значения? А то не совсем понятно... я к тому, что так, как написано — это имеет смысл только в том случае, если Вы сразу возвращаете этот resultset клиенту, и всё... нет?

Aleksander
22.10.2018
07:00:10
нет мне в таблицу надо положить 10 млн уникальных значений в поле qrcode

по маске 121 и потом 9 значений уникальных

по маске 121 и потом 9 значений уникальных
но эти 9 значений не должны быть последовательными или сиквенсом

Denis
22.10.2018
07:04:13
нагенерируйте заведомо больше, отсортируйте в случайном порядке и возьмите столько, сколько нужно

Aleksander
22.10.2018
07:05:44
нагенерируйте заведомо больше, отсортируйте в случайном порядке и возьмите столько, сколько нужно
не пойдет постоянно так делать какой то универсальный скрипт нужен

Aleksander
22.10.2018
07:06:12
https://t.me/pgsql/104387
не так не пойдет

Алексей
22.10.2018
07:06:17
добрый день. подскажите есть ли готовые решения, чтобы настроить репликацию из oracle в pg ?

Aleksander
22.10.2018
07:06:30
последовательного смысла не должно выявляться

Bogdan
22.10.2018
07:06:46
не так не пойдет
чего? сгенерил потом переиешал

Aleksander
22.10.2018
07:07:21
чего? сгенерил потом переиешал
в этом случае я должен заведомо больше нагенерить

а мне конкретно 10 млн надо чтобы постоянно генерил вперемешку уникально

Bogdan
22.10.2018
07:07:59
т.е. с дырками надо?

Denis
22.10.2018
07:08:15
не пойдет постоянно так делать какой то универсальный скрипт нужен
что именно вам нужно делать постоянно? догенеривать к этим 10 млн еще?

Google
Bogdan
22.10.2018
07:08:35
заюзай UUID

скажем у тебя есть уже 200 лямов, и ты хчоешь сгенрить еще 10 рандомных и проерить что таких уже неыбло, то база обсорется проверять по индексу

merge join 10 M + 200M это не так себе и быстро

Aleksander
22.10.2018
07:10:21
Denis
22.10.2018
07:12:27
http://preshing.com/20121224/how-to-generate-a-sequence-of-unique-random-integers/ я вот этим воспользовался в похожем случае.

Страница 1045 из 1062