小编a_h*_*ame的帖子

将用户标识传递给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中的列数据

我想在表格的每一列中的每个单元格中添加一些文本作为该特定列的符号.例如,说我的表如下(所有字段都是类型字符变化):

name    age    location
james   45     france
simon   33     usa
ben     76     china

我想将其修改为:

name    age    location
ajames   b45     cfrance
asimon   b33     cusa
aben     b76     cchina

有没有人对我如何做到这一点有任何建议?

postgresql

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

在MS-DOS中向文本文件添加一个新行

我正在创建一个.bat文件,我希望将ASCII艺术写入文本文件.

我能够找到在回显文本时向文件添加新行的命令,但是当我读取该文本文件时,我看到的只是布局符号而不是空格.我认为它可以通过Word或甚至写字板打开该文件,但我希望它可以在任何计算机上工作,即使该计算机只有记事本(大多数情况下).

如何在某个程序(即写字板)中打开文本文件或在文件中写入适当的空格字符?


编辑:

我发现这是最好的使用方式:

echo <line1> > <filename>
echo <line2> >> <filename>
Run Code Online (Sandbox Code Playgroud)

PS我|在我的ASCII艺术中使用,所以它崩溃了,Dumb Dumb Dumb :)

newline batch-file

36
推荐指数
3
解决办法
20万
查看次数

了解postgres解释w /位图堆/索引扫描

我有一张450万行的表.没有主键.该表有一个列p_id,类型为整数.idx_mytable_p_id使用该btree方法在此列上有一个索引.我做:

SELECT * FROM mytable WHERE p_id = 123456;
Run Code Online (Sandbox Code Playgroud)

我对此进行了解释并看到以下输出:

Bitmap Heap Scan on mytable  (cost=12.04..1632.35 rows=425 width=321)
  Recheck Cond: (p_id = 543094)
  ->  Bitmap Index Scan on idx_mytable_p_id  (cost=0.00..11.93 rows=425 width=0)
        Index Cond: (p_id = 543094)
Run Code Online (Sandbox Code Playgroud)

问题:

  • 为什么该查询执行堆扫描然后进行位图索引扫描?
  • 为什么要检查425行?为什么操作321的宽度?
  • 告诉我12.04..1632.35和0.00..11.93的费用是多少?

记录有773行,p_id值为123456.有38列mytable.

谢谢!

postgresql

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

逗号分隔结果在SQL中

我有以下代码,它将为我的结果创建一个逗号分隔列表:

DECLARE @listStr VARCHAR(MAX)
SELECT @listStr = COALESCE(@listStr+', ' ,'') + INSTITUTIONNAME
FROM EDUCATION
WHERE STUDENTNUMBER= '111'
SELECT @listStr
Run Code Online (Sandbox Code Playgroud)

问题在于它创建了一个大量逗号分隔的行.我需要它每行返回一个逗号分隔的列表.

所以,如果Simon已经成为2个机构的一部分,那么我希望:

"INSTITUTION1, INSTITUTION2"
Run Code Online (Sandbox Code Playgroud)

由于我没有提供where子句,我希望我的结果对于数据库中的每一行都显示如下.

t-sql sql-server sql-server-2008

36
推荐指数
3
解决办法
11万
查看次数

ORA-01861:文字与格式字符串不匹配

当我尝试执行此代码段时:

cmd.CommandText = "SELECT alarm_id,definition_description,element_id,
    TO_CHAR (alarm_datetime, 'YYYY-MM-DD HH24:MI:SS'),severity,
    problem_text,status FROM aircom.alarms 
    WHERE status = 1 and 
    TO_DATE (alarm_datetime,'DD.MM.YYYY HH24:MI:SS') > TO_DATE ('07.09.2008 
    09:43:00', 'DD.MM.YYYY HH24:MI:SS') 
    order 
    by ALARM_DATETIME desc";
Run Code Online (Sandbox Code Playgroud)

我明白了:

ORA-01861: literal does not match format string
Run Code Online (Sandbox Code Playgroud)

数据库连接没有问题,因为我可以执行基本的SQL命令.

这个陈述有什么问题?

sql oracle oracle10g ora-01861

34
推荐指数
2
解决办法
38万
查看次数

为什么PostgreSQL中的所有数据库都有公共模式?

我很好奇为什么PostgreSQL中的所有数据库都有一个public所有用户都可以访问的模式.我知道我可以撤销权限并将其授予一个用户,但为什么这不是默认值?

postgresql

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

"<>"在Oracle中意味着什么

SQL语言中<>的含义:示例代码如下

SELECT ordid,
       prodid,
       qty
FROM   item
WHERE  prodid IN (SELECT prodid
                  FROM   item
                  WHERE  ordid = 605)
       AND qty IN (SELECT qty
                   FROM   item
                   WHERE  ordid = 605)
       AND ordid <> 605;  
Run Code Online (Sandbox Code Playgroud)

sql oracle

33
推荐指数
3
解决办法
11万
查看次数

如何在PostgreSQL中使用具有多个值的SQL LIKE条件?

有没有更短的方法来寻找多个匹配:

 SELECT * 
 from table 
 WHERE column LIKE "AAA%" 
    OR column LIKE "BBB%" 
    OR column LIKE "CCC%"
Run Code Online (Sandbox Code Playgroud)

这个问题适用于PostgreSQL 9.1,但如果有一个通用的解决方案,它会更好.

sql postgresql postgresql-9.1

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

有一种简单的方法可以在Java中将两列输出到控制台吗?

正如标题所说,有一种简单的方法可以在Java中向控制台输出两列吗?

我知道\t,但在使用printf时,我还没有找到基于特定列的空间方法.

java

32
推荐指数
3
解决办法
7万
查看次数