标签: postgresql

使用另一个 INSERT 的返回值 INSERT INTO

我想做这样的事情:

INSERT INTO table2(name)
  INSERT INTO table1(name, address) VALUES ('me', 'home')
  RETURNING name;
Run Code Online (Sandbox Code Playgroud)

然后我希望在 table2 中有一个新记录'me'in name。这在SELECT返回值时可以正常工作,但我在嵌套插入时遇到了问题。

postgresql insert

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

PostgreSQL:从当前余额向后计算余额

我有一张balances表,current_balance用于存储银行账户;以及一个transfers表格,其中包含每次转账到账户和从账户转账的行(存款为正数,取款为负数)。

我需要创建一个帐户摘要,其中包含帐户的每次转账,以及该转账产生的余额。

例子:

+--------------------------+--------+---------+
|      activity_date       | amount | balance |
+--------------------------+--------+---------+
| 2015-12-24T20:27:00.670Z |     10 |     180 |
| 2015-12-19T12:13:50.085Z |   -275 |     170 |
| 2015-12-18T23:56:22.513Z |     10 |     445 |
| 2015-12-18T23:54:46.880Z |     50 |     435 |
| 2015-12-17T03:32:10.707Z |   -120 |     385 |
| 2015-12-12T03:56:50.775Z |     35 |     505 |
| 2015-12-11T23:09:40.211Z |    -20 |     470 |
| 2015-12-03T01:17:59.460Z |    -10 |     490 |
| 2015-11-23T15:39:35.003Z |    500 |     500 …
Run Code Online (Sandbox Code Playgroud)

postgresql recursive

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

regexp_replace() 与 replace() 替换字符串中的所有匹配项

默认情况下,在 PostgreSQL 中,regexp_replace()替换字符串中第一次出现的子字符串,同时replace()替换字符串中所有出现的子字符串。为什么默认行为不同?

(我知道regexp_replace可以使用该g选项替换字符串中所有出现的子字符串。)

例子:

SELECT regexp_replace('hello world', 'o', 'z');  -- returns "hellz world"
SELECT regexp_replace('hello world', 'o', 'z', 'g'); -- returns "hellz wzrld"
SELECT replace('hello world', 'o', 'z'); -- returns: "hellz wzrld"
Run Code Online (Sandbox Code Playgroud)

postgresql pattern-matching replace

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

使用动态 SQL 函数中的参数进行通配符搜索

在使用动态 SQL 的函数中使用参数时,在 PostgreSQL 中实现通配符搜索的正确方法是什么?

作为起点,以下是 Erwin Brandstetter 在 stackoverflow 上回答不同问题的示例:

/sf/answers/843309421/

CREATE OR REPLACE FUNCTION report_get_countries_new (starts_with text
                                                   , ends_with   text = NULL)
RETURNS SETOF lookups.countries AS
$func$
DECLARE
   sql text := 'SELECT * FROM lookups.countries WHERE country_name >= $1';
BEGIN
   IF ends_with IS NOT NULL THEN
      sql := sql || ' AND country_name <= $2';
   END IF;

   RETURN QUERY EXECUTE sql
   USING starts_with, ends_with;
END
$func$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

假设country_name您想要进行前导和尾随通配符搜索。

例如,不使用参数,AND country_name LIKE '%ic%'.

在这种情况下,在否定 …

postgresql sql-injection dynamic-sql plpgsql

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

为每组共享相同外键值的行创建唯一序列

在我的系统中,我希望每个用户都有自己的文章id序列。

因此,我创建了一个数据库,其中包含一个表,描述了users它们之间的对应关系articles。以下是该表的概要:

    +------+----------+---------+
    | 身份证 | 文章 | 用户 ID |
    +------+----------+---------+
    | 1 |一些笔记| 1 |
    +------+----------+---------+
    | 2 |一些笔记| 1 |
    +------+----------+---------+
    | 3 |一些笔记| 2 |
    +------+----------+---------+ 
    | 4 |一些笔记| 2 |
    +------+----------+---------+
    | 5 |一些笔记| 3 |
    +------+----------+---------+

但我想ids通过以下方式在这个表中生成:

    +------+----------+---------+
    | 身份证 | 文章 | 用户 ID |
    +------+----------+---------+
    | 1 |一些笔记| 1 |
    +------+----------+---------+
    | 2 |一些笔记| 1 |
    +------+----------+---------+
    | 1 |一些笔记| 2 …

postgresql database-design sequence postgresql-9.3

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

别名列名

我正在尝试select在 PostgreSQL 中运行基本查询,但在使用列别名时遇到问题。我试图创建别名,randomfield As [Space In Name]但它给出了一个错误

错误:“[”处或附近的语法错误
第 2 行:randomfield As [Space In Name]

而且我还尝试使用不带括号的别名,但这也出现了错误。你如何用空格别名Postgresql

Select randomfield As [Space In Name]
From saledata
Run Code Online (Sandbox Code Playgroud)

postgresql

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

Postgresql 中主键与外键的自动索引创建

对于 PostgreSQL 9.4 ( http://www.postgresql.org/docs/9.4/static/ddl-constraints.html ) 指出

外键必须引用作为主键或形成唯一约束的列。这意味着被引用的列总是有一个索引(主键或唯一约束的基础);因此检查引用行是否匹配将是有效的。由于从被引用表中删除一行或对被引用列进行更新将需要扫描引用表以查找与旧值匹配的行,因此索引引用列通常也是一个好主意。因为这并不总是需要,而且有很多关于如何索引的选择,外键约束的声明不会自动在引用列上创建索引。

我想知道这些行的作者是否忽略了一个主要观点:当我有一个父子关系(例如带有购物车位置的购物车)时,孩子(购物车位置)标记其与父项(购物车)的关系当我想获取给定父级的所有子级时,使用父级(购物车)主键的外键我使用非索引外键列。

因此,默认情况下不为外键列生成索引(与主键列相反)和让用户体验次优性能的开销是否超过维护索引的开销,而维护索引在较小的表大小下仅执行另一方面,查询性能的微小改进?

也许有人对导致此决定的数据库实现细节和推理有更多见解和/或可以指出为什么外键列的默认索引生成(在 Postgresql 中)可能导致未被注意的严重问题的原因。

postgresql index foreign-key primary-key

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

有效地搜索整个 1 级嵌套 JSONB

假设我们需要检查 jsonb 列是否包含与任何值(非嵌套,仅第一级)中的子字符串匹配的特定值。

如何有效地优化查询以搜索JSONB每个值的整个列?

是否有一些好的替代方法可以替代转换ILIKE %val%为文本的 jsonb 数据类型?

jsonb_each_text(jsonb_column) ILIKE '%val%'
Run Code Online (Sandbox Code Playgroud)

例如,考虑以下数据:

SELECT '{"col1": "somevalue", "col2": 5.5, "col3": 2016-01-01, "col4": "othervalue", "col5": "yet_another_value"}'::JSONB
Run Code Online (Sandbox Code Playgroud)

当需要%val%在列中包含不同键配置的记录中搜索模式时,您将如何优化这样的查询?是否有更好的替代方法来将每个键值对提取为文本并执行 ILIKE/POSIX 搜索?

主要是,我正在寻找一种不同的替代方法来将整个 jsonb 字段解压缩到单独的键行中,它们的值为 text

postgresql json postgresql-9.5

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

我们可以将数据从 PostgreSQL 导出到 xlsx 文件吗?

我想将查询结果导出为 xlsx 文件格式。
我知道我们可以将其导出为 csv 文件,但我想将其导出为 xlsx 文件。

像下面这样:

copy(select name_related from hr_employee limit 3) to '/tmp/ABC.xlsx'
delimiter ',' xlsx header;
Run Code Online (Sandbox Code Playgroud)

postgresql export excel

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

PostgreSQL ntile() 分区

我有一个带有人口值的点网格。每个点都有一个 id 和人口值。我也有一个 state_id,它说明了要点是什么状态。

现在我想计算每个州的百分位数 ntile(100)。

   SELECT  id, population, state_id, 
   ntile(100) OVER(ORDER BY car20) as percentile
   FROM avi_threshold01 
Run Code Online (Sandbox Code Playgroud)

当我使用它时,我认为它会计算所有点和状态的 ntile。

postgresql aggregate window-functions group-by

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