小编Pri*_*mre的帖子

从 PostgreSQL 搜索中排除过时数据的最佳方法

我有一个包含以下列的表:

  • 一个名为的整数列 id
  • 一个名为的文本列 value
  • 一个名为的时间戳列 creation_date

目前,已经为idvalue列创建了索引。

我必须在此表中搜索给定值,并希望尽可能快地进行搜索。但我真的不需要查看超过一个月的记录。因此,理想情况下,我想将它们从索引中排除。

实现这一目标的最佳方法是什么:

  1. 执行表分区。仅在子表中搜索适当的月份。
  2. 创建仅包含最近记录的部分索引。每个月重新创建它。
  3. 还有什么?

(PS.:“最好的解决方案”是指最方便、快捷、易于维护的解决方案)

sql postgresql indexing ddl plpgsql

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

PostgreSQL 文本列上的唯一索引 - 会导致高 CPU 负载吗?

我在 PostgreSQL 表的文本列上创建了一个唯一索引。数据库现在有超过 10,000,000 行并且还在增加。我注意到在这个表上执行 INSERT/UPDATE 语句时,我的数据库有一个巨大的 CPU 负载(超过 40.00%)。但是,当这些插入/更新完成后,CPU 负载会下降到正常水平。

在上述文本列上定义的唯一索引是否会损害我的数据库性能?还是我应该检查其他东西?

database postgresql

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

如何将@添加到postgres hibernate方言?

我们有一个使用GIN索引的全文搜索的本机查询,如下所示:

CREATE INDEX idx_column1 ON table1 USING gin (to_tsvector('english', column1));

SELECT *
FROM table1
where to_tsvector('english', column1) @@ to_tsquery('searchedText')
Run Code Online (Sandbox Code Playgroud)

但是,我们无法在HQL中复制此查询,因为符号@上的hibernate错误.如何在hibernate方言中添加符号@?

postgresql full-text-search hibernate hql

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

重命名Flyway可重复迁移是否可以?

我为我的项目设置了一堆可重复的迁移,以删除(并重新创建)一些经常修改的数据库视图。包结构如下所示:

src/main/resources
  |-db
    |-R__pets_amphibians_view.sql
    |-R__pets_birds_view.sql
    |-R__pets_mammals_view.sql
    |-R__pets_reptiles_view.sql
    |-...
    |-<versioned-migrations>
Run Code Online (Sandbox Code Playgroud)

现在,我想做的就是将R__pets_mammals_view.sql视图分成两个更具体的视图:eg R__pets_mammals_dogs_view.sqlR_pets_mammals_rodents_view.sql。这也将需要重命名/删除原始R_pets_mammals_view.sql文件。

我想知道的是我是否可以在不弄乱架构版本控制的情况下做到这一点(可能会杀死进程中的任何托管环境)?不幸的是,我在Flyway文档中找不到答案。

PS:我知道,一旦将版本化的迁移部署到本地环境以外的其他地方,重命名它不是一个好主意。但是,由于可以随意修改可重复的迁移(并且由于它们是最后执行的),所以我不确定在这种情况下它们是否真正“算在内”。

database-migration flyway

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

使用XSLT <xsl:element>和字面声明元素有什么区别?

我刚刚开始使用XSLT,并且想知道在<xsl:element>用于定义元素与在XSLT中将它们声明为文字之间的有效区别.例如,让我们简化一个案例,我将一个小型XML文档的内容转换为(x)HTML.

我可以<xsl:element>顺便说一下:

<xsl:element name="h1">
    <xsl:value-of select="heading"/>
</xsl:element>
Run Code Online (Sandbox Code Playgroud)

2.或者手动定义元素:

<h1>
    <xsl:value-of select="heading"/>
</h1>
Run Code Online (Sandbox Code Playgroud)

这两者之间的实际差异是什么,如果存在差异,哪些被认为是"好风格"

xml xslt

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

从表变量中选择

我试图保存SELECT查询的结果,传递它,并在另一个PL/pgSQL函数中重用它:

DECLARE
  table_holder my_table; --the type of table_holder is my_table;
  result text;

BEGIN
  SELECT * INTO table_holder FROM table_holder ;

  result = another_function(table_holder);  
  return result;
END
Run Code Online (Sandbox Code Playgroud)

代码another_function(table_holder my_table)分别为:

BEGIN

  RETURN QUERY
  SELECT col FROM table_holder where id = 1;

END
Run Code Online (Sandbox Code Playgroud)

是否可以对SELECT变量运行查询?如果没有,有没有办法解决这个限制?

我正在使用PostgreSQL 9.2.

postgresql plpgsql postgresql-9.2

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

根据查询结果将值设置为变量(PL/pgSQL样式)

我需要做的是使用EXECUTING查询为变量设置一个值.

在纯SQL风格中,我可以执行以下操作:

// here declaring function and etc...
DECLARE cnt INTEGER;

EXECUTE 'SELECT COUNT(*) FROM t' INTO cnt;
Run Code Online (Sandbox Code Playgroud)

如何以PL/pgSQL函数的形式实现相同的功能?以下伪代码的正确语法是什么?(以下显然是错误的语法)

cnt :=  EXECUTE ( 'SELECT COUNT(*) FROM t' )   ;
Run Code Online (Sandbox Code Playgroud)

postgresql plpgsql postgresql-9.2

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

如何在postgresql函数中返回临时表结果

我在函数中使用临时表来保存一些结果,但我不知道如何从函数返回表.理想情况下,我想在一个查询中执行所有操作(即不是两个查询:一个用于调用函数,另一个用于从临时表中获取数据).

目前我的main_function()情况如下:

CREATE OR REPLACE FUNCTION main_function() RETURNS void AS
$BODY$
BEGIN

    DROP TABLE IF EXISTS temp_t CASCADE;
    CREATE TEMP TABLE temp_t AS SELECT * FROM tbl_t limit 0;

    EXECUTE 'INSERT INTO temp_t ' || 'SELECT * FROM tbl_t limit 10';

END;
$BODY$
LANGUAGE 'plpgsql' ;
Run Code Online (Sandbox Code Playgroud)

而我这样称呼它:

SELECT * from main_function();
SELECT * from temp_t;
Run Code Online (Sandbox Code Playgroud)

同样,问题是我实际上并不想调用第二个查询.第一个查询应该返回临时表作为结果,但是我不能这样做,因为临时表是在创建的,main_function()所以它不能是它的返回类型.

关于如何实现这一点的任何想法?

谢谢

sql postgresql types

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

INSTEAD OF DELETE触发器(PostgreSQL)

我想禁用表上的DELETE语句。我需要做的是设置一个字段值,而不是删除相应的记录。

到目前为止,我已经尝试了以下方法:

CREATE TRIGGER delete_trg
INSTEAD OF DELETE
ON schema.tbl
FOR EACH ROW
EXECUTE PROCEDURE schema.tbl_delete_fn();
Run Code Online (Sandbox Code Playgroud)

我的schema.tbl_delete_fn()功能如下:

CREATE OR REPLACE FUNCTION schema.tbl_delete_fn()
  RETURNS trigger AS
BEGIN
  NEW.deleted := true;

  RETURN NEW;
END;
Run Code Online (Sandbox Code Playgroud)

到目前为止,这似乎不起作用...有什么想法吗?

sql database postgresql triggers function

3
推荐指数
2
解决办法
4072
查看次数

使用 PostgreSQL 在 Django 上运行 syncdb 时出现 SSL 错误

我正在共享主机(使用 fcgi)上运行带有 PostgreSQL (postgresql_psycopg2) 的 Django 项目。澄清一下:我目前没有使用 SSL。

部署我的项目并python manage.py syncdb在命令行上运行后,我收到以下错误:

"OperationalError: received invalid response to SSL negotiation: 2"
Run Code Online (Sandbox Code Playgroud)

每当我尝试连接到数据库时,这是我在每个调试页面上看到的消息。

谢谢!

python django postgresql ssl

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