PostgreSQL中用户定义的变量

ish*_*shk 5 postgresql variables dynamic-sql

我有以下MySQL脚本,我想在PostgreSQL中实现.

 SET @statement = search_address_query;
      PREPARE dynquery FROM @statement;
      EXECUTE dynquery;
      DEALLOCATE PREPARE dynquery;
Run Code Online (Sandbox Code Playgroud)

如何使用PostgreSQL定义用户定义的变量"@statement".

Erw*_*ter 12

PostgreSQL通常不使用普通SQL中的变量.但你也可以这样做:

SET foo.test = 'SELECT bar FROM baz';

SELECT current_setting('foo.test');
Run Code Online (Sandbox Code Playgroud)

阅读手册中的自定义选项.

PostgreSQL 9.1或更早版本中,您需要custom_variable_classes在使用之前声明.

但是,如果没有PL(过程语言),则无法 EXECUTE动态SQL.您将使用DO命令执行ad-hoc语句(但您无法从中返回数据).或者用于CREATE FUNCTION创建执行动态SQL的函数(并且可以以任何可想象的方式返回数据).

使用动态SQL时,请务必防止SQL注入.

关于自定义变量的相关问题:
有没有办法在PostgreSQL查询中定义命名常量?

  • @Reinsbrain:取决于你如何设置它。`postgresql.conf` 中的设置是为每个连接预设的。`SET` 的效果在当前会话期间有效,并且仅在同一会话中可见。`SET LOCAL` 仅适用于事务。还有更多设置选项的方法:/sf/answers/634744421/,/sf/answers/2112587011/ (3认同)