标签: postgresql

根据条件选择和计数

我有两个表,proj: id nameproj_reports: id, position, created_at, key_id, proj_id我想从选择key_reports每个proj_id

- total number of `key_id` which can be done with `count(.key_id)`
- total number of DISTINCT `key_id` `count(DISTINCT .key_id)`
- total number of `key_id` where `position` > 1
- total number of `key_id` where `position` > 2 AND < 5
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我不知道如何添加这些条件来检查位置是 > 或 < 一个数字还是在一个范围内。

postgresql

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

在 PostgreSQL 中使用动态列名

我正在使用 PostgreSSQL 8.3。

我想执行这个查询:

select COALESCE(col_fr,col,'Unknown') from my_table where id = 'abc';
Run Code Online (Sandbox Code Playgroud)

故事中的扭曲是列名colum_fr应该动态生成。my_table对于不同的语言有不同的列。就像是:

id   col   col_ja    col_fr
Run Code Online (Sandbox Code Playgroud)

我在水晶报告中使用此查询,我可以在其中传递语言的字符串参数:

select COALESCE(col_||{?parameter},col,'Unknown') from my_table where id = 'abc';
Run Code Online (Sandbox Code Playgroud)

如果{?language}value 是,它将在内部转换为如下内容fr

select COALESCE(col_||'fr',col,'Unknown') from my_table where id = 'abc';
Run Code Online (Sandbox Code Playgroud)

这永远不会奏效。

我不想使用选择大小写,使其动态化。
作为替代解决方案,我还尝试创建一个存储过程:

CREATE OR REPLACE FUNCTION get_policy_name (
  id text,
  lang   text,
  def_value text
)
RETURNS SETOF record AS
$body$
DECLARE
   sql text;
BEGIN
    sql := 'SELECT   COALESCE(col_'||quote_ident(lang)||',col,'||quote_literal(def_value)||')FROM my_table WHERE id ='||quote_literal(id);

   RETURN QUERY EXECUTE …
Run Code Online (Sandbox Code Playgroud)

postgresql stored-procedures dynamic-sql plpgsql postgresql-8.3

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

这里有什么更好的 - 单列或多列主键?

假设您有一张桌子groups和一张桌子item。每个项目都属于一个组。它是该群体的固有组成部分。一个项目不能存在于一个组之外,也不能移动到另一个组中。

当试图决定item表的主键时,我应该使用什么?

我应该像这样组成一个人工全局序列键:

CREATE TABLE items
(
    item serial PRIMARY KEY,
    group integer NOT NULL REFERENCES groups(group),
);
Run Code Online (Sandbox Code Playgroud)

...或者我应该使用复合键和每组项目序列,如下所示:

CREATE TABLE items
(
    group integer NOT NULL REFERENCES groups(group),
    item integer NOT NULL,

    PRIMARY KEY(group, item)
);
Run Code Online (Sandbox Code Playgroud)

我更倾向于第二种解决方案的原因是帖子 URL 将始终显示组项目,因此将它们都作为复合主键是有意义的。在第一种解决方案的情况下,URL 包含多余的信息,因为组 ID 已经可以单独从项目 ID 中推导出来。但是,URL 结构是给定的,不能更改。

第二种解决方案的缺点是您必须管理每个组的序列(即每个组的每个项目整数应从 0 开始)。

在最佳实践、规范化和性能方面哪个更好?或者这只是品味问题?

postgresql database-design best-practices primary-key

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

Postgresql 链式从站和从站提升

所以我有一个像 Master -> Slave1 -> Slave2 这样的设置。Slave1 从 Master 复制,Slave2 从 Slave1 复制。如果我将 Slave1 提升为 master,Slave2 是否可以继续从 Slave1 进行复制。这是我将 Slave1 提升为 master 后在 Slave2 上看到的日志:

2014-06-13 04:28:11 UTC LOG:  replication terminated by primary server
2014-06-13 04:28:11 UTC DETAIL:  End of WAL reached on timeline 3 at 3E/62B2C758.
2014-06-13 04:28:11 UTC LOG:  fetching timeline history file for timeline 4 from primary server
2014-06-13 04:28:11 UTC LOG:  invalid record length at 3E/62B2C758
2014-06-13 04:28:11 UTC LOG:  restarted WAL streaming at 3E/62000000 on …
Run Code Online (Sandbox Code Playgroud)

postgresql replication

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

PostgreSQL 是否支持多线程复制?

PostgreSQL 复制是单线程的吗?有没有什么工具可以实现多线程复制?

我问这个是因为 Mariadb 支持这个,目前我正在学习这两个数据库。

postgresql replication

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

如何确定 postgres 数据库是否包含 GiST 索引以及什么类型?

有没有办法轻松检查 PostgreSQL 数据库是否有任何 GiST 索引以及它们是什么类型?

postgresql postgresql-9.2 gist-index

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

如何以可管道化的格式使用 psql 列出所有数据库和表?

这个问题涉及获取列表。所以我明白了:

$ psql --list
                                    List of databases
      Name      |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
----------------+----------+----------+-------------+-------------+-----------------------
 testdb1        | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 odoo           | openerp  | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 odoo-demo      | openerp  | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 odoo8          | openerp  | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
Run Code Online (Sandbox Code Playgroud)

我可以psql --list|grep UTF8|awk '{ print $1 }'用来获取仅包含数据库的列表。可psql也直接给我一个干净的有用列表?

postgresql scripting

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

PosgreSQL:在没有连接的单个表上选择非常慢

我正在尝试帮助一位在 PostgreSQL 查询方面遇到问题的同事。

我们将它缩小到一个表的连接,这使得查询变得非常缓慢,并且经过调查,我们发现即使是对“数据”表的简单 select * 请求也需要长达 2 分钟才能返回结果。

该表包含 420,000 条记录和 13 列,其中没有一个是 BLOB 或任何大量内容(它们都是文本)。

运行 EXPLAIN ANALYZE VERBOSE 大大低估了返回结果所需的时间

即对于 SELECT * FROM DATA

"Seq Scan on data  (cost=0.00..18284.35 rows=389735 width=27) 
(actual time=0.135..594.929 rows=426934 loops=1)"
"  Output: id,..."
"Total runtime: 1069.643 ms"
Run Code Online (Sandbox Code Playgroud)

而在没有 EXPLAIN 的情况下运行查询会给出

Total query runtime: 86598 ms.
426934 rows retrieved.
Run Code Online (Sandbox Code Playgroud)

如果我在提问时违反了任何惯例,我很抱歉,但我根本不了解 Postgres,所以如果有人能建议我们应该寻找什么样的潜在问题来帮助解决这个问题,我将不胜感激已收到。

编辑:根据要求,表定义

CREATE TABLE data
(
  id text NOT NULL,
  methodid text NOT NULL,
  replicateid text, 
  t_id text NOT NULL, 
  t_name text NOT …
Run Code Online (Sandbox Code Playgroud)

postgresql

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

在 PostGIS“栅格”类型列上创建唯一约束

我正在使用以下命令向 PostGIS-2.1.3 (PostgreSQL-9.1.14) 中的光栅图像之一添加约束。

ALTER TABLE schema1.table1 ADD CONSTRAINT enforce_scalex_rast unique (rast);
Run Code Online (Sandbox Code Playgroud)

但得到以下错误:

ERROR:  data type raster has no default operator class for access method "btree"
HINT:  You must specify an operator class for the index or define a default operator class for the data type.
Run Code Online (Sandbox Code Playgroud)

请有人帮我解决这个错误。我对运算符类没有基本的了解。谢谢。

齐亚。

postgresql constraint postgis raster

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

使 IN 子句表现得像 AND 子句

我在stackoverlow上问过同样的问题,但没有得到答案,所以这就是我在这里问的原因(我读过应该在 SO 上问简单的 sql 问题,但我别无选择)。

假设我有 3 个表:posts,post_categoriescategories. 我正在实现某种带有过滤器的页面,我可以在其中按类别过滤帖子。用户可以选择多个类别。当他选择多个时,它们应该相加。我无法让它工作。我现在拥有的是简单的IN()SQL 子句:

SELECT posts.id, post_categories.category_id FROM posts 
JOIN post_categories ON posts.id = post_categories.post_id 
WHERE post_categories.category_id IN (1,2,3) LIMIT 10;
Run Code Online (Sandbox Code Playgroud)

但它并不匹配所有的 id,它是OR,我需要AND. 我在这里需要的是查找类别为 的所有帖子id=1 AND id=2 AND id=3,但此查询返回IN()列表中至少有一个类别的帖子。

postgresql relational-division

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