相关疑难解决方法(0)

PostgreSQL中的计算/计算/虚拟/派生列

PostgreSQL是否支持计算/计算列,如MS SQL Server?我在文档中找不到任何内容,但由于此功能包含在许多其他DBMS中,我认为我可能会遗漏某些内容.

例如:http://msdn.microsoft.com/en-us/library/ms191250.aspx

postgresql materialized-views calculated-columns sql-view generated-columns

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

将常见查询存储为列?

使用PostgreSQL,我有很多查询,如下所示:

SELECT <col 1>, <col 2>
     , (SELECT sum(<col x>)
        FROM   <otherTable> 
        WHERE  <other table foreignkeyCol>=<this table keycol>) AS <col 3>
FROM   <tbl>
Run Code Online (Sandbox Code Playgroud)

鉴于子选择在每种情况下都是相同的,有没有办法将该子选择存储为表中的伪列?基本上,我希望能够从表A中选择一列,它是表B中与记录相关的特定列的总和.这可能吗?

postgresql database-design view

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

合并两列并添加到一个新列中

在PostgreSQL中,我想使用SQL语句组合两列并从中创建一个新列.

我正在考虑使用concat(...),但有更好的方法吗?
最好的方法是什么?

sql postgresql null concatenation

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

使用数据类型"text"存储字符串的任何缺点?

根据Postgres文档,它们支持3种数据类型的字符数据:

character varying(n), varchar(n)  variable-length with limit
character(n), char(n)             fixed-length, blank padded
text                              variable unlimited length
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中,我遇到了一些令人不愉快的情况,其中插入/更新查询失败,因为要插入的所需文本超出varchar(n)char(n)限制.

对于这种情况,更改此类列的数据类型就text足够了.

我的问题是:
如果我们概括并更改每个字符存储列的数据类型text,那么性能/内存方面是否有任何缺点?
如果数据类型的列text每次都存储10个或更少的字符,我应该选择text还是varchar(10)
如果我追求的text是什么?

sql postgresql types postgresql-performance

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

创建 concat_ws 的不可变克隆

这篇博文展示了如何immutable_concat在 Pg 中创建函数的示例:

CREATE OR REPLACE FUNCTION immutable_concat(VARIADIC "any")
  RETURNS text AS 'text_concat'
  LANGUAGE internal IMMUTABLE
Run Code Online (Sandbox Code Playgroud)

我想做同样的事情concat_ws并且相应的text_concat_ws确实存在,但是,以下只会使过程崩溃:

CREATE OR REPLACE FUNCTION immutable_concat_ws(VARIADIC "any")
  RETURNS text AS 'text_concat_ws'
  LANGUAGE internal IMMUTABLE
Run Code Online (Sandbox Code Playgroud)

更新: 的 siguatureimmutable_concat_ws应该是(glue, *parts),一个胶水(text 或 varchar)和一个或多个部分(text、varchar 或 null)。

我在这里缺少什么?

postgresql concat function concat-ws

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

Postgres 生成的列不是不可变的

我正在向表中添加一些列,并且想要一个将它们组合在一起的生成列,我将使用它作为唯一索引。当我尝试添加列时,出现错误ERROR: generation expression is not immutable

我遵循了这个问题的解决方案,并且专门使用CASE||进行字符串连接,这应该是immutable.

ALTER TABLE tag
  ADD COLUMN prefix VARCHAR(4) NOT NULL,
  ADD COLUMN middle BIGINT NOT NULL,
  ADD COLUMN postfix VARCHAR(4), -- nullable
  -- VARCHAR size is 4 prefix + 19 middle + 4 postfix + 2 delimiter
  ADD COLUMN tag_id VARCHAR(29) NOT NULL GENERATED ALWAYS AS
    (CASE WHEN postfix IS NULL THEN prefix || '-' || middle
          ELSE prefix || '-' || middle || '-' …
Run Code Online (Sandbox Code Playgroud)

postgresql generated-columns postgresql-14

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