Size: a a a

pgsql – PostgreSQL

2020 August 19

N

Nikolay in pgsql – PostgreSQL
ну и (gvkey, datadate, indfmt, consol, fyr, popsrc, datafmt, effdate, item) -- такой PK указывает на ошибку проектирования. Скорее всего, это не ключ
источник

N

Nikolay in pgsql – PostgreSQL
Vitaly U
Ну а если не инстансы, а db, можно реплецировать юзеров с правами и полиси как-нибудь? Кастомное решение мы сейчас и делаем, но вот решил у умных людей спросить, вдруг есть варианты нейтив
Юзеры в кластере постгреса — cluster-wide, не привязаны к БД
источник

VU

Vitaly U in pgsql – PostgreSQL
Nikolay
Юзеры в кластере постгреса — cluster-wide, не привязаны к БД
policy тоже?
источник

N

Nikolay in pgsql – PostgreSQL
Ну а RLS — оно же на таблицы навешивается.
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Vitaly U
Ну а если не инстансы, а db, можно реплецировать юзеров с правами и полиси как-нибудь? Кастомное решение мы сейчас и делаем, но вот решил у умных людей спросить, вдруг есть варианты нейтив
в каждой базе создайте нужные роли, затем выдайте эти роли пользователям. да, нужно делать для каждой базы
источник

N

Nikolay in pgsql – PostgreSQL
👋 🙂
источник

VU

Vitaly U in pgsql – PostgreSQL
Nikolay
Ну а RLS — оно же на таблицы навешивается.
Логично
источник

VU

Vitaly U in pgsql – PostgreSQL
Victor Yegorov
в каждой базе создайте нужные роли, затем выдайте эти роли пользователям. да, нужно делать для каждой базы
А если их 1000 господи
источник

N

Nikolay in pgsql – PostgreSQL
Если у вас пачка однотипных баз (может, не-прод среды какие-то?), тогда можно БД создавать по шаблону.  Впендюрив заготовку в template0. Или create database ... teamplate template_db_name;
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Vitaly U
А если их 1000 господи
чего 1000?
источник

VU

Vitaly U in pgsql – PostgreSQL
Victor Yegorov
чего 1000?
Утрирую, баз
источник

N

Nikolay in pgsql – PostgreSQL
for dbname in $(psql -c '\l'); do ...; done
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Vitaly U
Утрирую, баз
мы создаём базу по шаблону примерно на 30 строчек, ничего там страшного или сложного нет
источник

VU

Vitaly U in pgsql – PostgreSQL
Nikolay
Если у вас пачка однотипных баз (может, не-прод среды какие-то?), тогда можно БД создавать по шаблону.  Впендюрив заготовку в template0. Или create database ... teamplate template_db_name;
Все динамически меняется, идеальный концепт - центричное ведение прав и полиси и распространение на все db
источник

N

Nikolay in pgsql – PostgreSQL
Ну надо брать в руки ansible или что-то такое, и всё автоматизировать, как везде и делается
источник

VY

Victor Yegorov in pgsql – PostgreSQL
- создаёте базу $NEWDB с владельцем $NEWOWN
- создаёте роль ${NEWDB}_role, даёте ей право подключаться к базе, забираете подключение у public
- создаёте роли ${NEWDB}_ro и ${NEWDB}_rw для соответствующего доступа
- даёте _ro и _rw ролям право использовать схему public, забираете права на схему у public и меняете владельца схемы на $NEWOWN
- прописываете DEFAULT PRIVILEGES для $NEWOWN и для postgres, выдавая права для _ro и для _rw
можно дополнять и усложнять по желанию
источник

K

Kosta in pgsql – PostgreSQL
Nikolay
Индекс по gvkey, кстати, отдельный вообще не нужен -- оно уже проиндексировано в PK

можно было бы помеменять 1й и 2й столбец местами в PK и не делать тогда уже csco_idesind_datadate_idx совсем (тем более оно частичное). Т.е. PK нам бы и помогал навигировать по datadate и далее по gvkey.
Благодарю. Сейчас займусь.
источник

K

Kosta in pgsql – PostgreSQL
Nikolay
ну и (gvkey, datadate, indfmt, consol, fyr, popsrc, datafmt, effdate, item) -- такой PK указывает на ошибку проектирования. Скорее всего, это не ключ
Это копия таблицы и данных  с другой бд.
источник
2020 August 20

AI

Alex Ignatov in pgsql – PostgreSQL
Nikolay
хорошая статья, но там ещё один аспект есть:

они делают CHECK constraint вместо прямолинейного NOT NULL. Если хотим [пере]определить PK, так не сработает.

С 11 можно делать трюк: ALTER .. SET NOT NULL DEFAULT -1 (супербыстро, если версия 11+), а потом батчами обновляем старые строки, постепенно избавляясь от -1.  Именно так PK можно переопределять
Почему не сработает? Constraint будет для новых строк,  со старыми можно дополнительно поработать если вдруг там нулы.
дальше делаем конкурентно уникальный ключ на колонку(и) unique_idx и после делаем
alter table the_big_table
  add primary key using index unique_idx;
Если переопределить надо - просто старый констрейнтpk дропаем после в той же транзакции переключаем на новый уник индекс.
Да чутка на милисекунды будет блок при перекидывании констрейнта pk
Как бы норм. Я так уже переопределял pkшки.
Или подразумевается что-то другое?
источник

VU

Vitaly U in pgsql – PostgreSQL
Victor Yegorov
- создаёте базу $NEWDB с владельцем $NEWOWN
- создаёте роль ${NEWDB}_role, даёте ей право подключаться к базе, забираете подключение у public
- создаёте роли ${NEWDB}_ro и ${NEWDB}_rw для соответствующего доступа
- даёте _ro и _rw ролям право использовать схему public, забираете права на схему у public и меняете владельца схемы на $NEWOWN
- прописываете DEFAULT PRIVILEGES для $NEWOWN и для postgres, выдавая права для _ro и для _rw
можно дополнять и усложнять по желанию
Это мне?
источник