小编Erw*_*ter的帖子

在触发器函数中,如何获取正在更新的字段

这可能吗?我有兴趣找出在UPDATE请求中指定了哪些列,而不管正在发送的新值可能是也可能不是已存储在数据库中的值.

我想这样做的原因是因为我们有一个表可以从多个来源接收更新.以前,我们没有记录更新源自哪个来源.现在,该表存储了哪些源执行了最新更新.我们可以更改一些来源以发送标识符,但这不是所有内容的选项.所以我希望能够识别UPDATE请求何时没有标识符,以便我可以替换默认值.

postgresql triggers sql-update

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

PostgreSQL - 如何在不同的时区渲染日期?

我的服务器在中部时间.我想使用东部时间渲染时间戳.

例如,我想呈现2012-05-29 15:00:002012-05-29 16:00:00 EDT.

我怎样才能实现它?

to_char('2012-05-29 15:00:00'::timestamptz at time zone 'EST5EDT', 'YYYY-MM-DD HH24:MI:SS TZ')2012-05-29 16:00:00(没有区域).

to_char('2012-05-29 15:00:00'::timestamp at time zone 'EST5EDT', 'YYYY-MM-DD HH24:MI:SS TZ')2012-05-29 14:00:00 CDT(错).

这个有用,但它太复杂了必须有一个更简单的方法: replace(replace(to_char(('2012-05-29 15:00:00'::timestamptz at time zone 'EST5EDT')::timestamptz, 'YYYY-MM-DD HH24:MI:SS TZ'), 'CST', 'EST'), 'CDT', 'EDT')

postgresql timezone datetime

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

SQL查询的函数没有结果数据的目标

我正在尝试创建一个返回SELECTed结果集的函数.当我像这样调用我的postgres函数时,select * from tst_dates_func()我得到一个错误,如下所示:

ERROR:  query has no destination for result data
HINT:  If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT:  PL/pgSQL function "tst_dates_func" line 3 at SQL statement

********** Error **********

ERROR: query has no destination for result data
SQL state: 42601
Hint: If you want to discard the results of a SELECT, use PERFORM instead.
Context: PL/pgSQL function "tst_dates_func" line 3 at SQL statement
Run Code Online (Sandbox Code Playgroud)

这是我创建的函数:

CREATE OR REPLACE FUNCTION tst_dates_func() …
Run Code Online (Sandbox Code Playgroud)

sql postgresql plpgsql

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

快速找到与PostgreSQL相似的字符串

我需要在表中创建类似字符串的排名.

我有下表

create table names (
name character varying(255)
);
Run Code Online (Sandbox Code Playgroud)

目前,我正在使用提供该功能的pg_trgm模块similarity,但我遇到了效率问题.我创建了一个像Postgres手册建议的索引:

CREATE INDEX trgm_idx ON names USING gist (name gist_trgm_ops);
Run Code Online (Sandbox Code Playgroud)

我正在执行以下查询:

select (similarity(n1.name, n2.name)) as sim, n1.name, n2.name
from names n1, names n2
where n1.name != n2.name and similarity(n1.name, n2.name) > .8
order by sim desc;
Run Code Online (Sandbox Code Playgroud)

查询有效,但是当你有数百个名字时,它确实很慢.此外,也许我忘了一点SQL,但我不明白为什么我不能使用条件and sim > .8没有得到"列sim不存在"错误.

我想要任何提示使查询更快.

sql postgresql text similarity postgresql-performance

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

可以为空的列占用PostgreSQL中的额外空间吗?

我有一个包含7列的表,其中5列将为null.我将有一个空列int,text,date,boolean,和money数据类型.该表将包含数百万行,其中包含许多空值.我担心空值会占用空间.

另外,你知道Postgres索引空值吗?我想阻止它索引空值.

postgresql indexing null database-design

26
推荐指数
2
解决办法
5439
查看次数

使用PostgreSQL中另一个表的列更新表的列

我想将val1table1中一列val2的所有值复制到另一个表的一列table2.我在PostgreSQL中尝试过这个命令:

update table2
set val2 = (select val1 from table1)
Run Code Online (Sandbox Code Playgroud)

但我得到了这个错误:

错误:用作表达式的子查询返回的多行

有没有替代方法呢?

sql postgresql sql-update

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

在PostgreSQL中使用CASE一次影响多个列

我有SELECT这些表达式的Postgres 语句:

,CASE WHEN (rtp.team_id = rtp.sub_team_id)
 THEN 'testing'
 ELSE TRIM(rtd2.team_name)
 END AS testing_testing
,CASE WHEN (rtp.team_id = rtp.sub_team_id)
 THEN 'test example'
 ELSE TRIM(rtd2.normal_data)
 END AS test_response
,CASE WHEN (rtp.team_id = rtp.sub_team_id)
 THEN 'test example #2'
 ELSE TRIM(rtd2.normal_data_2)
 END AS another_example
Run Code Online (Sandbox Code Playgroud)

在我的特定查询中有5个字段,其输出取决于是否rtp.team_id = rtp.sub_team_id计算为true.我CASE一遍又一遍地重复具有相同条件的陈述.

有没有什么方法可以组合这些CASE表达式来一次切换多列的输出?

sql postgresql case

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

使用不带密码的psql命令运行批处理文件

我试图psql使用批处理脚本执行此命令:

psql --host=localhost --dbname=<dbname> --port=<Port Number>
     --username=<dbuser> --file=C:\PSQL_Script.txt --output=C:\PSQL_Output.txt
Run Code Online (Sandbox Code Playgroud)

问题是每次执行批处理脚本时都要求输入密码.如何通过批处理文件密码参数?

postgresql connection shell psql

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

使用CASE和GROUP BY进行数据透视的动态替代方法

我有一个看起来像这样的表:

id    feh    bar
1     10     A
2     20     A
3      3     B
4      4     B
5      5     C
6      6     D
7      7     D
8      8     D
Run Code Online (Sandbox Code Playgroud)

我希望它看起来像这样:

bar  val1   val2   val3
A     10     20 
B      3      4 
C      5        
D      6      7     8
Run Code Online (Sandbox Code Playgroud)

我有这个查询,它执行此操作:

SELECT bar, 
   MAX(CASE WHEN abc."row" = 1 THEN feh ELSE NULL END) AS "val1",
   MAX(CASE WHEN abc."row" = 2 THEN feh ELSE NULL END) AS "val2",
   MAX(CASE WHEN abc."row" = 3 THEN feh ELSE …
Run Code Online (Sandbox Code Playgroud)

sql postgresql pivot crosstab window-functions

26
推荐指数
4
解决办法
3万
查看次数

PostgreSQL全文搜索和Trigram混淆

我对PostgreSQL的全部概念,全文搜索和Trigram有点困惑.在我的全文搜索查询中,我正在使用tsvectors,如下所示:

SELECT * FROM articles
WHERE search_vector @@ plainto_tsquery('english', 'cat, bat, rat');
Run Code Online (Sandbox Code Playgroud)

问题是,这种方法不能解释拼写错误.然后我开始阅读关于 Trigram和pg_trgm:

通过其他示例,似乎使用了trigram或使用了向量,但从未使用过.所以我的问题是:他们一起使用过吗?如果是这样,怎么样?trigram会替换全文吗?三卦更准确吗?三卦如何表现?

postgresql full-text-search pattern-matching

26
推荐指数
1
解决办法
4499
查看次数