这可能吗?我有兴趣找出在UPDATE请求中指定了哪些列,而不管正在发送的新值可能是也可能不是已存储在数据库中的值.
我想这样做的原因是因为我们有一个表可以从多个来源接收更新.以前,我们没有记录更新源自哪个来源.现在,该表存储了哪些源执行了最新更新.我们可以更改一些来源以发送标识符,但这不是所有内容的选项.所以我希望能够识别UPDATE请求何时没有标识符,以便我可以替换默认值.
我的服务器在中部时间.我想使用东部时间渲染时间戳.
例如,我想呈现2012-05-29 15:00:00为2012-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')
我正在尝试创建一个返回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) 我需要在表中创建类似字符串的排名.
我有下表
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不存在"错误.
我想要任何提示使查询更快.
我有一个包含7列的表,其中5列将为null.我将有一个空列int,text,date,boolean,和money数据类型.该表将包含数百万行,其中包含许多空值.我担心空值会占用空间.
另外,你知道Postgres索引空值吗?我想阻止它索引空值.
我想将val1表table1中一列val2的所有值复制到另一个表的一列table2.我在PostgreSQL中尝试过这个命令:
update table2
set val2 = (select val1 from table1)
Run Code Online (Sandbox Code Playgroud)
但我得到了这个错误:
错误:用作表达式的子查询返回的多行
有没有替代方法呢?
我有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表达式来一次切换多列的输出?
我试图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)
问题是每次执行批处理脚本时都要求输入密码.如何通过批处理文件密码参数?
我有一个看起来像这样的表:
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) 我对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 ×10
sql ×5
sql-update ×2
case ×1
connection ×1
crosstab ×1
datetime ×1
indexing ×1
null ×1
pivot ×1
plpgsql ×1
psql ×1
shell ×1
similarity ×1
text ×1
timezone ×1
triggers ×1