@pgsql

Страница 799 из 1062
Grigory
11.05.2018
08:34:55
и как расчитать размер walов? они ведь генерятся сильно по-разному в зависимости от нагрузки на базу.
дык это самая сложная часть, как и расчет размера изменений файлов данных

Andrey
11.05.2018
08:35:05
вот я тоже пробежался по FAQ и обнаружил что нет, только для WAL. но надеялся что FAQ устарел и компрессию таки завезли.

Grigory
11.05.2018
08:36:08
делаем бэкапы на протяжении месяца, получаем примерное представление о дельте, которая набегает за сутки

Google
Grigory
11.05.2018
08:36:16
умножаем на 2, а лучше на 4

на правах рекламы, pg_probackup не смотрели?

Andrey
11.05.2018
08:41:13
нет. пока не смотрел. ну то есть доку я на него почитал, arman я видел (я так понял это просто доработанный arman?)

вопрос - а он в этой https://postgrespro.ru/products/1c/supported версии доступен?

Grigory
11.05.2018
08:41:52
отдельным пакетом

вот тут инструкция по установке: https://github.com/postgrespro/pg_probackup

Andrey
11.05.2018
08:43:38
о! не знал что есть отдельная репа

а что ещё в отдельных репках так лежит?

Grigory
11.05.2018
08:46:33
затрудняюсь сказать

это скорее недоработка ссылочного аппарата сайта, наличие каких-либо репозиториев не должно быть тайным знанием

Andrey
11.05.2018
08:48:39
да вцелом наверное было лучше если бы был один репозиторий, а оттуда уже ставить всё. ну для каждой ос свой.

Andrey
11.05.2018
08:50:27
да я туда конечно уже посмотрел.

Google
Andrey
11.05.2018
08:52:01
на правах рекламы, pg_probackup не смотрели?
> Создание копий с удалённого сервера в настоящее время не поддерживается. вот это печаль

Grigory
11.05.2018
08:52:01
https://github.com/postgrespro так вот же
я про пакетные репозитории =)

Artyom
11.05.2018
11:56:15
Добрый день Кто может подсказать Планирую создать базу данных Таблицы users И user_type Плюсом для каждого user_type еще таблицы students managers Теперь вот в чем вопрос. Как это всё связать?

Darafei
11.05.2018
12:04:19
а чем отличается user от student, a student от managers?

кажется, ты вместо "колонка" используешь "новая таблица"

username | is_manager | is_student должно хватить?

Artyom
11.05.2018
12:06:09
юзер содержит только общие поля для этих типов а student и manager поля которые тольо для этих подходят

в общем решение подсмотрел вот тут но не очень пойму, как в таком случае взаимодейтсвуют таблицы students и instructors с таблицей user_types https://dba.stackexchange.com/questions/75792/multiple-user-types-db-design-advice

Artyom
11.05.2018
12:49:53
а как? я же где-то должен определить возможные user types

я никак не могу представить подобное у себя в голове но задача вот такая таблица users содержит поля общие для всех таблица user_type содержит возможные типы пользователей и их id таблица students содержит поля которые должны быть только у пользователя с типом students таблица managers содержит только поля которые должны быть у пользователя с типом managers

Yaroslav
11.05.2018
12:52:06
а как? я же где-то должен определить возможные user types
А зачем? У вас ведь всё равно по таблице для каждого типа (students, instructors и т.п.)... или нет?

Artyom
11.05.2018
12:56:48
Таблицы для каждого типа есть Но общее для этих типов вынесено в отдельную

Yaroslav
11.05.2018
12:57:50
Т.е. у вас что-то вроде: CREATE TABLE user_types(user_type_id text PRIMARY KEY, description text NOT NULL); CREATE TABLE users(user_id serial PRIMARY KEY, user_type_id text NOT NULL REFERENCES user_types, name text NOT NULL); CREATE TABLE students(student_id int PRIMARY KEY REFERENCES users(user_id), attr1 text, attr2 numeric); CREATE TABLE instructors(student_id int PRIMARY KEY REFERENCES users(user_id), attr1 text, attr2 numeric); ?

Artyom
11.05.2018
12:58:47
я делаю через орм но в целом выглядит похоже

Yaroslav
11.05.2018
12:59:15
Ну а вопрос-то в чём? ;)

Artyom
11.05.2018
13:00:19
как оно будет работать? как оно узнает, что этот пользователь именно students или instructors, если у них есть только user_id



Yaroslav
11.05.2018
13:02:53
как оно будет работать? как оно узнает, что этот пользователь именно students или instructors, если у них есть только user_id
Если бы не было поля user_type_id в таблице users —- по наличию записи в соответствующей таблице. Если оно есть, то по его значению.

Google
ultranoise ?
11.05.2018
13:03:27
это джанго что ли? такое ощущение что вопросы все таки про пайтон а не постгрес

Taras ?
11.05.2018
13:06:05
А как связаны между собой students и usertypes?
покажи примеры рядов данных в таблицах и сразу все понятно станет

я никак не могу представить подобное у себя в голове но задача вот такая таблица users содержит поля общие для всех таблица user_type содержит возможные типы пользователей и их id таблица students содержит поля которые должны быть только у пользователя с типом students таблица managers содержит только поля которые должны быть у пользователя с типом managers
если в user_type описываются все типы пользователей, и в таблице users могут быть и студенты, и не только студенты, и менеджеры (тоесть общая часть данных), а данные которые свойственны только студентам — в отдельной таблице, а данные которые свойственны только менеджерам — тоже в отдельной таблице, то все понятно

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

Yaroslav
11.05.2018
13:09:23
А как связаны между собой students и usertypes?
Никак. Модель-то не без недостатков. ;( Делают ещё так: CREATE TABLE users( user_id serial, user_type_id text NOT NULL REFERENCES user_types, name text NOT NULL, PRIMARY KEY (user_id, user_type_id) ); CREATE TABLE students( student_id int PRIMARY KEY, user_type_id text NOT NULL CHECK (user_type_id = 'student'), attr1 text, attr2 numeric, FOREIGN KEY (student_id, user_type_id) REFERENCES users(user_id, user_type_id) ); Но, по-моему, это как-то туповато. :(

Artyom
11.05.2018
13:12:19
допустим я сделаю запрос где захочу получить информацию по пользователю с id 1 и он - students значит помимо полей из users у него должны быть поля из students вот это я не пойму

Mike Chuguniy
11.05.2018
13:13:13
@uspen2018, Игорь, у вас синхронная репликация используется? У меня сейчас задача — клястер отказоустойчивый замутить, но одна нода нужна синхронная. Бизнес, однако. Вот выбираю между патронами и коросинк+пейсмейкер

Yaroslav
11.05.2018
13:15:50
Если вы делаете запрос по users, вы, очевидно, можете либо: . Получить поля только из users. . Получить поля из _всех_ связанных таблиц: LEFT JOIN каждой, NULL для нерелевантных (потому что, действительно "откуда ему знать"? ;) ). И вы не можете в реляционной СУБД получить в результате запроса записи, где для каждой набор полей отличается.

ultranoise ?
11.05.2018
13:19:37
ну если спросишь из users то получишь только из users

если сделаешь подзапросы или джойны — поулчишь еще и то что прикрутил

тут магии нет, что спросишь то и получишь

на алхимии я уже не помню толком, вроде можно джойнить прямо, а можно префетч делать

на джанго орм есть select_related

Google
ultranoise ?
11.05.2018
13:23:19
Session.query(User, Student).filter(User.id=Student.user_id).all() например

вот так на алхимии можно заджойнить

Artyom
11.05.2018
13:24:34
да это не проблема меня смущает немного другое щас, я попробую придумать, как это объяснить

ultranoise ?
11.05.2018
13:25:55
СУБД так спроектирована что она не будет ничего знать пока ты пальцем не ткнешь. пока не пропишешь что именно это поле будет ключем на форейн тейбл

Игорь
11.05.2018
13:27:11
@uspen2018, Игорь, у вас синхронная репликация используется? У меня сейчас задача — клястер отказоустойчивый замутить, но одна нода нужна синхронная. Бизнес, однако. Вот выбираю между патронами и коросинк+пейсмейкер
Привет, Миша! Да, используем. Не надо коросинков ) Я бы рекомендовал Patroni. Там (внезапно) есть возможность строгого синхронного режима. То есть если синхронная реплика недоступна, то мастер встает. Еще я б рекомендовал сделать так. Включить синхронную репликацию и где не надо синхронных коммитов ставить SET LOCAL synchronous_commit TO OFF

Mike Chuguniy
11.05.2018
13:35:53
Строго синхронный режим,как раз не надо. Нужен синк+асинк и без лишнего кодирования. Коросинк+пейсмейкеп может синк-ноду в асинк режим переводить при проблемах сети. Патроны такое могут?

Artyom
11.05.2018
13:37:36
СУБД так спроектирована что она не будет ничего знать пока ты пальцем не ткнешь. пока не пропишешь что именно это поле будет ключем на форейн тейбл
Кае для подобной базы вносить записи? То есть я сам смотрю, если он студент, то также добавляю его в таблицу стьюдент? Или как Я не пойму как мне взаимодействовать с этим

Yaroslav
11.05.2018
13:40:21
Кае для подобной базы вносить записи? То есть я сам смотрю, если он студент, то также добавляю его в таблицу стьюдент? Или как Я не пойму как мне взаимодействовать с этим
Вы сначала вставляете в таблицу users, потом в соответствующую таблицу (students или instructors). Итого, 2 INSERT-а. Вообще, "прозрачно" на уровне СУБД это сделать не так-то легко, мне кажется.

Artyom
11.05.2018
13:40:59
Но такой вариант будет нормальным? Просто мне хотелось бы правильно сделать, с точки зрения профессионалов

ultranoise ?
11.05.2018
13:42:11
ну если юзер_тайп там студент , то добавить в студентов, да, и строго после того как чувак будет в юзерах

Yaroslav
11.05.2018
13:42:59
Но такой вариант будет нормальным? Просто мне хотелось бы правильно сделать, с точки зрения профессионалов
Нормальный он или нет, зависит от задачи. ;) Т.е. это вот всё вам вообще зачем? То есть, почему не просто отдельные таблицы students, instructors, managers и т.п.?

ultranoise ?
11.05.2018
13:43:52
- получить юзера - - если у него юзер_тайп == студент, то добавить в студентов запись - - если нет то пропускаем - если юзера нет то завести его

ну с голым SQL это замучает, а с орм можно лаконичнее

Yaroslav
11.05.2018
13:45:34
ну с голым SQL это замучает, а с орм можно лаконичнее
Может быть и лаконичнее, только вот надёжно работать будет только через эту ORM...

ultranoise ?
11.05.2018
13:45:58
тут просто кажется что изначально схему бд не продуами, а щас сплитят таблицы, дата миграции гонят

через алхимию надежно работаь будет, главное логических ошибок не делать и соблюдать транзакционность

Artyom
11.05.2018
13:47:32
Нормальный он или нет, зависит от задачи. ;) Т.е. это вот всё вам вообще зачем? То есть, почему не просто отдельные таблицы students, instructors, managers и т.п.?
Я думал сделать так Но тогда получаются таблицы с почти идентичными записями Такой вариант мне показался более удобным

ultranoise ?
11.05.2018
13:48:26
ну так или иначе все равно сначала надо забить объект исходный а потом все что на него ссылается

Google
ultranoise ?
11.05.2018
13:49:32
можно вообще сначала заполнить юзерс а потом типа -

Yaroslav
11.05.2018
13:49:46
тут просто кажется что изначально схему бд не продуами, а щас сплитят таблицы, дата миграции гонят
Почему "не продумали"? Это вполне реальная задача (не такая уж частая, да). "Корень" её в том, что один объект реального мира _нужно_ рассматривать как относящийся в разным типам. Например, быки и коровы. Показателям "надой" или "кол-во телят" нечего делать в таблице "быки". А вот, например, выполненные привики (и т.п.) относятся к животным, независимо от пола.

ultranoise ?
11.05.2018
13:50:15
можно инсерт сделать уже когда юзеры будут готовы, просто инсерт в студентс из селекта по криетрию user_type==student или что там

Yaroslav
11.05.2018
13:50:41
Я думал сделать так Но тогда получаются таблицы с почти идентичными записями Такой вариант мне показался более удобным
Если у вас нет задачи рассматривать их как объекты разных типов, так и делайте отдельные таблицы, так же проще.

Artyom
11.05.2018
13:52:44
Ко мне будет обращаться фронт и передавать некоторые данные Которые я должен буду сохранить Эти данные будут разные для студентов и менеджеров

Yaroslav
11.05.2018
13:55:46
Ко мне будет обращаться фронт и передавать некоторые данные Которые я должен буду сохранить Эти данные будут разные для студентов и менеджеров
Это не обоснование, IMHO. Вот если бы вам нужно было где-то ссылаться иногда _только_ на студентов ( student_groups(group_id, student_id REFERENCES students, ... ) ), иногда только на менеджеров, а иногда на пользователей независимо от типа, тогда бы стоило что-то усложнять.

Artyom
11.05.2018
14:09:50
Ладно, я понял Но мне просто такое решение не понравилось

Mike Chuguniy
11.05.2018
14:23:17
Да, по умолчанию режим не строгий, если не будет синхронной реплики с мастером ничего не станет
Стоп, немного изменю вопросы: вот смотри, конфигурация следующая: мастер, синк-реплика и асинк-реплика. Такое возможно? Падает синк-реплика, ну или тормозить начинает. В этом случае асинк-реплика становится синк-репликой, если сеть позволяет, если обе тормозят, то пусть обе будут асинк-репликами. Такое возможно?

Игорь
11.05.2018
14:25:12
> мастер, синк-реплика и асинк-реплика. Такое возможно? Да, конечно Асинк становится синк Но всегда должна быть синк реплика. То есть если после сбоя асинк догонится, то ПГ сделает ее синк репликой

Так же при желании можно через Patroni API на лету менять тип репликации

Mike Chuguniy
11.05.2018
14:49:29
Через API - это уже рукоблудие. А так, спасибо, понЕл. Буду думать дальше.

Artyom
11.05.2018
16:10:18
Хмм А если я сам буду распределять между managers и students, то зачем мне таблица user_type?

Anton [Mgn, az09@osm]
11.05.2018
16:11:43
Artyom
11.05.2018
16:12:49
В плане? Ведь если я буду знать Что все пользователи с user_type = students(1) - студенты

Anton [Mgn, az09@osm]
11.05.2018
16:14:16
а, это видимо такая небольшая справочная таблица на три записи?..

Yaroslav
11.05.2018
16:14:50
В плане? Ведь если я буду знать Что все пользователи с user_type = students(1) - студенты
Она нужна, если у вас есть какие-то дополнительные данные про сами типы. Иначе хватит и констант (или enum).

Anton [Mgn, az09@osm]
11.05.2018
16:15:47
в интерфейсе может понадобится переключатель. что б это гвоздями в проге не забивать например следует хранить в БД

Artyom
11.05.2018
16:25:56
На фронте будет такой Но он мне будет присылать 1, 2, 3 Три типа пользователя

Anton [Mgn, az09@osm]
11.05.2018
16:35:31
ну а на фронт он откуда попадет?

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