如何防止或避免在 PostgreSQL 中运行没有 where 子句的 update 或 delete 语句?
与MySQL 中的SQL_SAFE_UPDATES语句相同,PostgreSQL 需要。
例如:
UPDATE table_name SET active=1; -- Prevent this statement or throw error message.
UPDATE table_name SET active=1 WHERE id=1; -- This is allowed
Run Code Online (Sandbox Code Playgroud)
我公司的数据库有许多具有插入和更新权限的用户,其中任何一个用户都会进行不安全的更新。在这个 secoario 如何处理这个。任何想法都可以编写触发器或任何扩展来处理 PostgreSQL 中的不安全更新。
我已关闭自动提交以避免这些错误。所以我总是有一个可以回滚的事务。您所要做的就是修改.psqlrc:
\set AUTOCOMMIT off
\echo AUTOCOMMIT = :AUTOCOMMIT
\set PROMPT1 '%[%033[32m%]%/%[%033[0m%]%R%[%033[1;32;40m%]%x%[%033[0m%]%# '
\set PROMPT2 '%[%033[32m%]%/%[%033[0m%]%R%[%033[1;32;40m%]%x%[%033[0m%]%# '
\set PROMPT3 '>> '
Run Code Online (Sandbox Code Playgroud)
您不必插入PROMPT语句。但它们很有帮助,因为它们改变了psql显示交易状态的提示。
这种方法的另一个优点是它使您有机会防止任何错误的更改。
例子 (psql):
database=# SELECT * FROM my_table; -- implicit start transaction; see prompt
-- output result
database*# UPDATE my_table SET my_column = 1; -- missed where clause
UPDATE 525125 -- Oh, no!
database*# ROLLBACK; -- Puh! revert wrong changes
ROLLBACK
database=# -- I'm completely operational and all of my circuits working perfectly
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1339 次 |
| 最近记录: |