简短版本:
换句话说,如果PostgreSQL查询以“SELECT”开头,那么假设该查询是只读的,即不更改DB中的任何内容,是否安全?
详细版本:
我正在为面向对象的多组件应用程序扩展PostgreSQL数据库,方法是将READ查询分派给读取副本示例,应用程序中的每个组件都负责构建自己的查询,但所有查询最终都在一个组件中分派到数据库中执行,我不希望其他组件处理区分读查询和非读查询的任务。我只想让负责查询处理的组件来处理它,因此,我正在寻找一种方法来检测只读查询,并将它们分派到读副本数据库而不是主数据库,以平衡主数据库上的负载。
我目前的解决方案是检查查询是否以“SELECT”开头,如果是,则将其标记为只读,并安全地将其调度到读副本DB。
1条答案
按热度按时间evrscar21#
不,这不安全的假设。
在Postgres中,函数允许运行DML和DDL语句,因此
可以更改数据库。
Postgres还有一个以SELECT开头的
create table ... as select ...
的非标准替代方法它将创建一个名为
some_table
的新表