
Grigory
11.05.2018
08:34:55

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
да вцелом наверное было лучше если бы был один репозиторий, а оттуда уже ставить всё. ну для каждой ос свой.

Darafei
11.05.2018
08:50:13

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

Google

Andrey
11.05.2018
08:52:01

Grigory
11.05.2018
08:52:01

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

Yaroslav
11.05.2018
12:48:55

Artyom
11.05.2018
12:49:53
а как? я же где-то должен определить возможные user types
я никак не могу представить подобное у себя в голове
но задача вот такая
таблица users содержит поля общие для всех
таблица user_type содержит возможные типы пользователей и их id
таблица students содержит поля которые должны быть только у пользователя с типом students
таблица managers содержит только поля которые должны быть у пользователя с типом managers

Yaroslav
11.05.2018
12:52:06

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

Google

Taras ?
11.05.2018
13:03:26

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

Artyom
11.05.2018
13:04:01
то есть..

Taras ?
11.05.2018
13:06:05
короч я статью скинул, там пример вроде неплохой, разбирайся


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:10:33

Yaroslav
11.05.2018
13:11:08

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 для нерелевантных (потому что, действительно "откуда ему знать"? ;) ). И вы не можете в реляционной СУБД получить в результате запроса записи, где для каждой набор полей отличается.

Taras ?
11.05.2018
13:16:26

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

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

Artyom
11.05.2018
13:37:36

Игорь
11.05.2018
13:40:10

Yaroslav
11.05.2018
13:40:21

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

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

Yaroslav
11.05.2018
13:42:59

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

Yaroslav
11.05.2018
13:45:34

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

Artyom
11.05.2018
13:47:32

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

ultranoise ?
11.05.2018
13:50:44

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

Yaroslav
11.05.2018
13:55:46

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

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
ну а на фронт он откуда попадет?