小编Erw*_*ter的帖子

来自日期的函数 extract() 返回双精度值

为什么 Postgres 函数从值extract()返回?double precisiondate

我能想象的唯一原因是,有一些语言环境使用日历(那些不是公历并由 Postgres 支持),以不同的方式计算日期/时间并可能返回浮点数。

postgresql date-format functions

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

慢全文搜索高出现的术语

我有一个包含从文本文档中提取的数据的表。数据存储在一个名为的列"CONTENT"中,我使用 GIN 创建了该索引:

CREATE INDEX "File_contentIndex"
  ON "File"
  USING gin
  (setweight(to_tsvector('english'::regconfig
           , COALESCE("CONTENT", ''::character varying)::text), 'C'::"char"));
Run Code Online (Sandbox Code Playgroud)

我使用以下查询对表执行全文搜索:

SELECT "ITEMID",
  ts_rank(setweight(to_tsvector('english', coalesce("CONTENT",'')), 'C') , 
  plainto_tsquery('english', 'searchTerm')) AS "RANK"
FROM "File"
WHERE setweight(to_tsvector('english', coalesce("CONTENT",'')), 'C') 
  @@ plainto_tsquery('english', 'searchTerm')
ORDER BY "RANK" DESC
LIMIT 5;
Run Code Online (Sandbox Code Playgroud)

File 表包含 250 000 行,每个"CONTENT"条目由一个随机单词和一个所有行都相同的文本字符串组成。

现在,当我搜索一个随机单词(在整个表中命中 1 个)时,查询运行得非常快(<100 毫秒)。但是,当我搜索出现在所有行中的单词时,查询运行速度非常慢(10 分钟或更长时间)。

EXPLAIN ANALYZE显示对于 1-hit 搜索,先执行位图索引扫描,然后执行位图堆扫描。对于慢速搜索,改为执行Seq Scan,这需要很长时间。

当然,在所有行中使用相同的数据是不现实的。但是由于我无法控制用户上传的文本文档,也无法控制他们执行的搜索,因此可能会出现类似的情况(搜索在 DB 中出现率很高的术语)。在这种情况下,如何提高搜索查询的性能?

运行 PostgreSQL 9.3.4

查询计划来自EXPLAIN ANALYZE

快速搜索(在 DB …

postgresql performance index full-text-search postgresql-9.3

8
推荐指数
1
解决办法
4001
查看次数

如何将 PostgreSQL 10 标识列添加到现有表中?

我正在阅读有关新的Postgres 10 标识列的信息,并了解了如何使用它SERIALCREATE TABLE.

是否也可以向现有表添加标识列?

例如,使用旧SERIAL列,我可以执行以下操作:

ALTER TABLE sourceTable ADD  COLUMN ogc_fid SERIAL;
Run Code Online (Sandbox Code Playgroud)

对于标识列,是否有与上述相同的内容?我试过:

ALTER TABLE sourceTable ADD  COLUMN ogc_fid GENERATED BY DEFAULT AS IDENTITY;
Run Code Online (Sandbox Code Playgroud)

但是得到了一个错误:

错误:“BY”第 1 行或附近的语法错误:...R TABLE sourceTable ADD COLUMN ogc_fid GENERATED BY DEFAULT

我正在考虑用我的脚本中的SERIAL列替换列IDENTITY,只是想检查这是否可行。

postgresql alter-table identity postgresql-10

8
推荐指数
1
解决办法
7449
查看次数

如何使用数据类型的默认值作为列默认值?

如何为 DDL 中的列指定默认值?我很确定以下方法不久前有效:

CREATE TABLE test
(
  col_1 CHAR(12) NOT NULL,
  col_2 INTEGER  NOT NULL WITH DEFAULT,
  col_3 CHAR(12) NOT NULL WITH DEFAULT
);
Run Code Online (Sandbox Code Playgroud)

我只想定义 DB 应该使用列数据类型的默认值(就像我上面的例子一样),而不是具体指定哪个值。

postgresql database-design datatypes ddl

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

LIKE 选择文本中任意位置独立存在的单词

在此处输入图片说明

我有一个包含以下文本的表格,我要搜索的关键字是“搜索”。所以我写了一个查询

SELECT [ID]
  ,[TextValue]
FROM
   [dbo].[SearchLike]
WHERE
   [TextValue] LIKE '%Search%'
Run Code Online (Sandbox Code Playgroud)

Q.1如何修改查询,以便只返回文本中包含“搜索”的记录,而不是使用“LSearch”。即根据图像前三个记录只返回。?

sql-server-2008 query pattern-matching

7
推荐指数
2
解决办法
6008
查看次数

先按字母顺序再按数字

我有这样的记录

 A5
 A4
 Z1
 B2
 C7
 C1A
 C11A
 B1
 B4
Run Code Online (Sandbox Code Playgroud)

我希望它们以这种方式排序

A4
A5
B1
B2
B4
C1
C11A
C7
Z1
Run Code Online (Sandbox Code Playgroud)

使用该ORDER BY条款。

我希望它们按字母排序,然后按数值排序。

postgresql order-by sorting natural-sort

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

将函数参数添加到 SQL 查询 WHERE 子句

我在 Java 中有一个 Web 应用程序,它使用查询。我不想把查询写成Java,所以我做了一个函数:

CREATE OR REPLACE FUNCTION testFunc(inputs text) RETURNS TABLE(...) AS 
$$
    SELECT .... FROM ...
    JOIN ...
    where true
    ;
$$
LANGUAGE SQL;
Run Code Online (Sandbox Code Playgroud)

我希望函数参数 INPUTS 也位于 WHERE 子句中,因此如果输入是

AND speed = 0 AND ....
Run Code Online (Sandbox Code Playgroud)

Where 子句看起来像

where true AND speed = 0 AND ... 
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

编辑

也可以接受许多参数(a int、b string、c string ..)但是我需要有

WHERE speed = * AND stop = * AND ...
Run Code Online (Sandbox Code Playgroud)

这是不可接受的。我怎样才能做到这一点?

或者我可以在里面放一个 if 语句吗?喜欢

Select .. . from ...
JOIN ... 
WHERE true
IF (a …
Run Code Online (Sandbox Code Playgroud)

postgresql dynamic-sql java functions

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

递归 CTE 以找到独特的 slug

我有一个文章表,我希望 slug 是独一无二的。

CREATE TABLE article (
   title char(50) NOT NULL,
   slug  char(50) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

当用户输入标题时,例如News on Apple,我想检查数据库以查看是否存在相应的 slug,例如news-on-apple。如果是这样,我将给一个数值添加后缀,直到找到一个唯一的值,例如news-on-apple-1. 可以通过递归 CTE 查询而不是在我的 ORM 中进行递归来实现。是否有一个很好的大概数字,我应该停止递归和出错。我可以想象人们使用相同的标题 1000 次,这将导致 1000 次查询只是为了创建 1 篇文章。

我对递归 CTE 的理解可能是不正确的,并且没有更好的方法来找到唯一的 slug。请提出任何替代方案。

postgresql database-design cte recursive

7
推荐指数
1
解决办法
1715
查看次数

如何在 PostgreSQL 中禁用参数值的日志记录

有没有办法禁用查询中使用的参数值的日志记录,同时仍然记录实际查询本身?

我想设置log_min_duration_statement = 0为与 pgBadger 一起使用。每个查询我得到两行,例如:

LOG: Select * from table where id = $1

DETAIL: parameters: $1 = 55
Run Code Online (Sandbox Code Playgroud)

我真的很想压制 DETAIL行,因为它我的日志膨胀并保存敏感信息。

是否可以从 Postgres 中禁用它?

postgresql configuration logging

7
推荐指数
1
解决办法
4420
查看次数

如何使用 EXECUTE 在动态 SQL 中使用函数参数?

我在 PostgreSQL 9.5 中编写了一个 PL/pgSQL 函数。它编译得很好,但是当我从 pgAdmin3 调用它时,它给了我一个错误。似乎用函数中传递的参数替换列的动态查询不起作用。

下面是我的功能:

CREATE OR REPLACE FUNCTION insertRecordsForNotification(username text, state     text, district text, organizationId text, bloodGroup text, status text,   approveRejectStatus text, emailSubject text, emailBody text, notificationStatus text) RETURNS boolean AS $$
DECLARE
id int;
r moyadev.user%rowtype;
_where text :=
  concat_ws(' AND '
    , CASE WHEN state IS NOT NULL THEN 'state = $2' END
    , CASE WHEN district IS NOT NULL THEN 'district = $3' END
    , CASE WHEN bloodGroup IS NOT NULL THEN …
Run Code Online (Sandbox Code Playgroud)

postgresql dynamic-sql parameter plpgsql postgresql-9.5

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