|
Как запретить update значения но разрешать insert?
|
|||
---|---|---|---|
#18+
Помогите пожалуйста решить задачу. Мне нужно в таблице PostgreSQL запретить обновление имеющихся значений столбца, но при этом оставить возможность вставки новых строк. Иными словами, если один раз значение записано, то менять его уже нельзя. Какие механизмы для этого есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2020, 19:23 |
|
Как запретить update значения но разрешать insert?
|
|||
---|---|---|---|
#18+
JMLabs Помогите пожалуйста решить задачу. Мне нужно в таблице PostgreSQL запретить обновление имеющихся значений столбца, но при этом оставить возможность вставки новых строк. Иными словами, если один раз значение записано, то менять его уже нельзя. Какие механизмы для этого есть? 1)через права на колонки 2)через триггера у обоих вариантов свои плюсы и минусы. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2020, 20:06 |
|
Как запретить update значения но разрешать insert?
|
|||
---|---|---|---|
#18+
Maxim Boguk, спасибо! Думаю что через права на колонку для меня не подойдет, т.к. приложение подключено к БД через логин имеющий все права на БД. А вот триггеры я ни разу не делал, прочитал тут https://stackoverflow.com/questions/56082230/postgres-trigger-to-avoid-update-in-a-column похожую ситуацию, но не понимаю как работает тот кусок кода. Я понимаю что при наступлении события UPDATE выполняется функция, но ведь NEW и OLD это ведь переменные которые как-то должны быть определены, где это? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2020, 20:22 |
|
Как запретить update значения но разрешать insert?
|
|||
---|---|---|---|
#18+
JMLabs Maxim Boguk, спасибо! Думаю что через права на колонку для меня не подойдет, т.к. приложение подключено к БД через логин имеющий все права на БД. А вот триггеры я ни разу не делал, прочитал тут https://stackoverflow.com/questions/56082230/postgres-trigger-to-avoid-update-in-a-column похожую ситуацию, но не понимаю как работает тот кусок кода. Я понимаю что при наступлении события UPDATE выполняется функция, но ведь NEW и OLD это ведь переменные которые как-то должны быть определены, где это? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Рекомендую все таки почитать официальную документацию начиная с https://www.postgresql.org/docs/13/plpgsql-trigger.html А не лезть в stackoverlfow и брать оттуда куски которые вы не понимаете. ps: " т.к. приложение подключено к БД через логин имеющий все права на БД." - а вот так вот не надо (это плохая практика)... но если этот логин у вас все таки (как я надеюсь) не superuser то даже у него можно забрать права на update колонки. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2020, 20:37 |
|
Как запретить update значения но разрешать insert?
|
|||
---|---|---|---|
#18+
JMLabs Мне нужно в таблице PostgreSQL запретить обновление имеющихся значений столбца, но при этом оставить возможность вставки новых строк. Иными словами, если один раз значение записано, то менять его уже нельзя. в самом приложении права раздать? так то UPDATE - это SELECT + DELETE + INSERT так что ещё и DELETE надо запретить ещё, как вариант, есть EVENT SOURCING (ES), там есть только INSERT ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2020, 00:47 |
|
Как запретить update значения но разрешать insert?
|
|||
---|---|---|---|
#18+
Maxim Boguk, спасибо з ссылку, разобрался и сделал триггер, решение со stackoverlfow рабочее. tip78, про такой способ тоже узнал, спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2020, 15:44 |
|
|
start [/forum/topic.php?fid=53&fpage=18&tid=1994298]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 127ms |
0 / 0 |