标签: postgresql

为什么我的 Postgres 9.6 创建索引并发无效?

我正在尝试在生产中同时创建索引。\d然而,这样做时,通过查看时的索引会显示INVALID

为什么会这样呢?以前从未见过这种情况发生。

尝试过重新创建,但仍然遇到同样的问题:

指数:

create index concurrently idx_wallet_customer_id_credit_stake_expires on wallet (customer_id,wallet_credit_stake,wallet_expires)
where wallet_closed is null and wallet_staked is null;
Run Code Online (Sandbox Code Playgroud)

postgresql index concurrency

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

\dt 说“没有找到任何关系。”

我已经成功地使用了 Postgres 14,但现在我被难住了。我有一个abc包含表的数据库和架构。

\c abc
\dt     -- shows tables
Run Code Online (Sandbox Code Playgroud)

我创建了一个新的数据库/架构xyz,但我看不到我创建的表:

\c xyc
\dt
Did not find any relations.
Run Code Online (Sandbox Code Playgroud)

如果我使用 PgAdmin4 我可以看到xyz的表格。如果我使用 DbVisualizer 我可以看到xyz的表格。但是,如果我使用psql我得到的所有内容,那么我是用户还是我自己(也是超级用户)Did not find any relations. 似乎并不重要。我在 PgAdmin4 中创建了这些表。这是一个错误吗?我尝试更改数据库或架构中所有对象的所有者,但无论我尝试什么,如果我使用.postgrespsqlxyzxyzpsql

不确定这是否有任何启发:

xyz-# \conninfo
You are connected to database "xyz" as user "postgres" via socket in "/tmp" at port "5432".
xyz=# \l
                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    | …
Run Code Online (Sandbox Code Playgroud)

postgresql psql

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

生成字符串列表的所有组合

我正在尝试生成 Strings 列表的所有组合 list = ['A', 'B', 'C', 'D']

我想生成所有可能性,然后在数据库中搜索

ABCD, ABC, ABD, ACD, BCD, AB, AC, AD, BC, BD, CD, A, B, C, D

我的专栏是这样的:

结果 代码
1 A
2 公元前
3 交流电
4
5 ABC
6 广告
7 BCD
8 光盘
9 A B C D
10 阿布德
………… ......

澄清一下:顺序并不重要(ABC = BAC = CAB),它应该返回多个结果(对于 list = ['A', 'B', 'C'] 与上面的 10 列相同,它应该返回 [1 、2、3、4、5])。

我正在使用 Postgres,并且尝试过一些我见过的递归函数,但没有一个能够完全满足我的需求。

postgresql recursive

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

在没有扩展的 PostgreSQL 中查找臃肿的表和索引

我的表在白天变化很大,大量数据被删除、修改和插入。

我怀疑这些表上的表和索引可能会臃肿。

我已经看到 PostgreSQL 的扩展选项可以检查这一点,但我想避免在我的数据库中创建扩展。

如何获取此信息(表/索引臃肿)而不必使用 PostgreSQL 扩展(例如:pgstattuple),仅使用本机 PostgreSQL 12 功能。

postgresql postgresql-performance

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

错误:当前事务被中止,命令被忽略,直到事务块结束 SQL 状态:25P02

我试图在我的 postgreSQL 数据库中创建一个死锁,但我得到的错误并不是我所期望的:

ERROR:  current transaction is aborted, commands ignored until end of transaction block
SQL state: 25P02
Run Code Online (Sandbox Code Playgroud)

我的设置基本上是这两者的混合:

我打开了 pgAdmin 4 的两个浏览器窗口,并有两个查询窗口。具有以下内容之一:

BEGIN;
    UPDATE "Products"
        SET "Price" = "Price" * 0.03
        WHERE "PID" = 1
        RETURNING *;
        
    UPDATE "Products"
        SET "Price" = "Price" * 0.03 
        WHERE "PID" = 2
        RETURNING *;
COMMIT;     
Run Code Online (Sandbox Code Playgroud)

另一种是使用这个:

BEGIN;
    UPDATE "Products"
        SET "Price" = "Price" * 3
        WHERE "PID" = 2
        RETURNING *;
        
    UPDATE "Products"
        SET "Price" = "Price" * 0.03 
        WHERE …
Run Code Online (Sandbox Code Playgroud)

postgresql transaction

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

如何查询postgres中jsonb字段中嵌套的json字符串?

在我们的数据库中,一个 JSONB 列包含一个对象,该对象具有一个属性,该属性是字符串编码的 JSON 对象。我需要在查询期间反序列化该字符串并检查其值。

create table datas (id int, data jsonb);
insert into datas (id, data) values (1, '{"key1": "{\"foo\": \"bar\"}"}');
Run Code Online (Sandbox Code Playgroud)

我可以选择字符串值,但将其转换为 JSONB 对象不起作用。这些查询都返回 null foo

select data->'key1'->'foo' from datas;
select to_json(data->'key1')->'foo' from datas;
select (data->'key1')::jsonb->'foo' from datas;
Run Code Online (Sandbox Code Playgroud)

dbfiddle:https://dbfiddle.uk/? rdbms=postgres_9.6&fiddle=9c0a9f7f1323a35051daba5177e52f57

postgresql json

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

临时表数据创建后去了哪里?

据我所知,temp_buffers设置用于存储临时表数据的服务。

PGDATA但是,当我创建了一个临时表时,会立即在主数据库中为其创建文件。因此,我希望能就几个问题得到帮助。

  1. a.会发生什么
    ?临时表数据是否temp_buffers 足以存储临时表数据?

    b. 临时表数据是否temp_buffers 不足以存储临时表数据?

  2. 是否存在temp_buffers 设置不足而导致溢出的情况pgsql_tmp

postgresql perl postgresql-extensions

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

如何使用 Postgres 处理短 UUID?

我发现许多 Web 服务(我想到的是 Stripe)对其 UUID 使用特殊的编码。它们将使用特殊的字母表(通常是小写、大写字母和数字)进行编码,而不是a44521d0-0fb8-4ade-8002-3385545c3318通常的编码,这会产生类似mhvXdrZT4jP5T8vBxuvm75. 两者都表示相同的 UUID,但编码不同。

我想知道这些服务如何处理这些 ID?特别是 Postgres 是否可以在数据库中直接使用这种短 ID 编码?(换句话说,任何选择或插入都将使用短 ID)

或者将这些短 ID 直接作为文本保存在数据库中是否有意义?

我找不到关于此的太多信息,所以我不确定这里的最佳实践是什么。

postgresql encoding uuid

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

删除表中的所有行后,如何将序列类型重置回 0?

我之前问过这个问题,有人在 db fiddle 上发布了一个非常有用的答案。这对我来说非常有效。但是,现在我想问一个新的(相关)问题:

假设我清除了表中的所有行(即在数据库小提琴示例中,通过执行“从 id > 0 的水果中删除”来删除苹果和橙色行)。如果我插入另一种水果(如西瓜),id 将从 4 开始,而不是 1。如何强制 id 类型重置回 0,以便下一次插入的 id=1 ?

postgresql postgresql-10

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

NULL 和空文本之间的区别

我正在使用 Postgres。val text NULL CHECK(val <> '')使用(或varchar) 和之间在存储或性能方面是否有显着差异val text NOT NULL?文本不能为空。因此,空文本可以作为未设置的标记。但是,例如,根据存储情况,它有什么区别吗?

我知道,我失去了空文本的 NULL 魔法,但这并不重要。另一方面,我可以更轻松地导入应用程序,因为我不必处理NULL. 它只是字符串输入,字符串输出。

postgresql null

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