相关疑难解决方法(0)

有没有办法在PostgreSQL查询中定义命名常量?

有没有办法在PostgreSQL查询中定义命名常量?例如:

MY_ID = 5;
SELECT * FROM users WHERE id = MY_ID;
Run Code Online (Sandbox Code Playgroud)

sql postgresql

41
推荐指数
5
解决办法
3万
查看次数

将用户标识传递给PostgreSQL触发器

我正在使用PostgreSQL 9.1.我的数据库是结构化的,以便我的应用程序使用实际的表.对于每个表,都有历史表,仅存储更改历史记录.历史表包含相同的字段,实际表格和字段形成一些额外信息,例如.编辑时间.历史表仅由触发器处理.

我有两种触发器:

  1. Before INSERT 触发器在创建表时向表添加一些额外信息(例如,create_time).
  2. Before UPDATE触发器和before DELETE触发器将旧值从实际表复制到历史表.

问题是我想使用触发器来存储进行这些更改的用户的ID.而id我是来自php应用程序的id,而不是PostgreSQL用户id.

有没有合理的方法呢?

使用INSERT和UPDATE,可以只将id的额外字段添加到实际表中,并将用户id作为SQL查询的一部分传递给SQL.据我所知,这不适用于DELETE.

所有触发器的结构如下:

CREATE OR REPLACE FUNCTION before_delete_customer() RETURNS trigger AS $BODY$
BEGIN
    INSERT INTO _customer (
        edited_by,
        edit_time,
        field1,
        field2,
        ...,
        fieldN
    ) VALUES (
        -1, // <- This should be user id.
        NOW(),
        OLD.field1,
        OLD.field2,
        ...,
        OLD.fieldN
    );
    RETURN OLD;
END; $BODY$
LANGUAGE plpgsql
Run Code Online (Sandbox Code Playgroud)

postgresql triggers

37
推荐指数
2
解决办法
1万
查看次数

PostgreSQL中用户定义的变量

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

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

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

postgresql variables dynamic-sql

5
推荐指数
1
解决办法
1万
查看次数

在 Postgres 查询期间设置临时全局变量

是否可以在查询期间设置可由 TRIGGER 过程捕获的变量(仅对相关查询有效)?

例如,我想记录查询执行者的ID(current_user始终相同)。所以我会做这样的事情:

tbl_executor (
  id   PRIMARY KEY,
  name VARCHAR
);
tbl_log (
  executor REFERENCE tbl_executor(id),
  op VARCHAR
);
tbl_other ...

CREATE TRIGGER t AFTER INSERT OR UPDATE OR DELETE ON tbl_executor 
FOR EACH ROW 
EXECUTE PROCEDURE (INSERT INTO tbl_log VALUES( ID_VAR_OF_THIS_QUERY ,TG_OP))
Run Code Online (Sandbox Code Playgroud)

现在,如果我运行如下查询:

INSERT INTO tbl_other 
VALUES(.......) - and set ID_VAR_OF_THIS_QUERY='id of executor' -
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:

           tbl_log
-----------------------------
id                | op      |
-----------------------------
'id of executor'  | 'INSERT'|
Run Code Online (Sandbox Code Playgroud)

我希望我已经提出了这个想法...而且我认为这几乎不可行...但是有人可以帮助我吗?

database postgresql

4
推荐指数
1
解决办法
2727
查看次数

标签 统计

postgresql ×4

database ×1

dynamic-sql ×1

sql ×1

triggers ×1

variables ×1