在 PostreSQL 中存储 UniProt 生物序列的最佳方法是什么?
回答 Jeremiah Peschka 的评论:
如果能够继续将以下散列函数(SEGUID - SEquence Globally Unique IDentifier)应用于序列,那就太好了。
CREATE OR REPLACE FUNCTION gfam.get_seguid(p_sequence character varying)
RETURNS character varying AS
$BODY$
declare
result varchar := null;
x integer; …Run Code Online (Sandbox Code Playgroud) 我有一个表,其中包含两列整型数组的排列/组合,第三列包含一个值,如下所示:
CREATE TABLE foo
(
perm integer[] NOT NULL,
combo integer[] NOT NULL,
value numeric NOT NULL DEFAULT 0
);
INSERT INTO foo
VALUES
( '{3,1,2}', '{1,2,3}', '1.1400' ),
( '{3,1,2}', '{1,2,3}', '0' ),
( '{3,1,2}', '{1,2,3}', '1.2680' ),
( '{3,1,2}', '{1,2,3}', '0' ),
( '{3,1,2}', '{1,2,3}', '1.2680' ),
( '{3,1,2}', '{1,2,3}', '0' ),
( '{3,1,2}', '{1,2,3}', '0' ),
( '{3,1,2}', '{1,2,3}', '1.2680' ),
( '{3,1,2}', '{1,2,3}', '0.9280' ),
( '{3,1,2}', '{1,2,3}', '0' ),
( '{3,1,2}', '{1,2,3}', '1.2680' ),
( …Run Code Online (Sandbox Code Playgroud) 在 PostgreSQL 8.4 中执行触发器函数需要什么权限?
似乎为角色设置的权限与执行触发器功能无关。我想我有一天看到执行触发器函数所需的特权是 EXECUTE 特权,但对于表的所有者,而不是执行触发调用触发器函数的触发器的操作的实际角色。
我找不到解释这一点的文档部分,有什么帮助吗?
postgresql trigger stored-procedures permissions postgresql-8.4
我需要在 document_revisions 表中保留一个唯一的(每行)修订号,其中修订号的范围仅限于文档,因此它不是整个表唯一的,仅适用于相关文档。
我最初想出了类似的东西:
current_rev = SELECT MAX(rev) FROM document_revisions WHERE document_id = 123;
INSERT INTO document_revisions(rev) VALUES(current_rev + 1);
Run Code Online (Sandbox Code Playgroud)
但是有一个竞争条件!
我试图用 解决它pg_advisory_lock,但文档有点稀缺,我不完全理解它,我不想错误地锁定某些东西。
以下是可以接受的,还是我做错了,或者有更好的解决方案?
SELECT pg_advisory_lock(123);
current_rev = SELECT MAX(rev) FROM document_revisions WHERE document_id = 123;
INSERT INTO document_revisions(rev) VALUES(current_rev + 1);
SELECT pg_advisory_unlock(123);
Run Code Online (Sandbox Code Playgroud)
我不应该为给定的操作 (key2) 锁定文档行 (key1) 吗?所以这将是正确的解决方案:
SELECT pg_advisory_lock(id, 1) FROM documents WHERE id = 123;
current_rev = SELECT MAX(rev) FROM document_revisions WHERE document_id = 123;
INSERT INTO document_revisions(rev) VALUES(current_rev + 1);
SELECT pg_advisory_unlock(id, 1) FROM …Run Code Online (Sandbox Code Playgroud) 我遇到了一个问题,即我有两个从用户到我的 PostgreSQL 服务器的连接,这些连接已经运行了大约 4 个小时并且已经处于提交状态相当长一段时间(我一直在观看它至少 1 小时) . 这些连接会阻止其他查询运行,但它们本身并未被阻止。
这是有问题的两个连接。
postgres=# select * from pg_stat_activity where usename = 'xxxxx';
datid | datname | procpid | usesysid | usename | current_query | waiting | xact_start | query_start | backend_start | client_addr | client_port
-------+---------+---------+----------+---------+---------------+---------+-------------------------------+-------------------------------+-------------------------------+---------------+-------------
20394 | xxxxxx | 17509 | 94858 | xxxxx | COMMIT | f | 2014-01-30 05:51:11.311363-05 | 2014-01-30 05:51:12.042515-05 | 2014-01-30 05:51:11.294444-05 | xx.xx.xxx.xxx | 63531
20394 | xxxxxx | 9593 | 94858 | xxxxx | COMMIT …Run Code Online (Sandbox Code Playgroud) 我尝试使用 Nagios 脚本来监视 Postgres 数据库上的数据库连接数,但我遇到了这个问题:这些连接数被视为当前打开的连接数,每 5 分钟测量一次。
SELECT sum(numbackends) FROM pg_stat_database;
Run Code Online (Sandbox Code Playgroud)
尽管如此,这似乎错过了大量的短期连接,因此统计数据与现实相去甚远。
我尝试手动运行脚本,我观察到即使在两个连接之间发生了很大的变化,彼此之间的距离也只有几秒钟。
我怎样才能以可靠的方式获得这些信息?像 max(connectios) 发生在一个时间间隔内。
给定两个数字nand m,我想生成一系列的形式
1, 2, ..., (n-1), n, n, (n-1), ... 2, 1
Run Code Online (Sandbox Code Playgroud)
并重复它m几次。
例如,对于n = 3and m = 4,我想要以下 24 个数字的序列:
1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1
---------------- ---------------- ---------------- ----------------
Run Code Online (Sandbox Code Playgroud)
我知道如何通过以下两种方法之一在 PostgreSQL 中实现此结果:
使用以下查询,该查询使用该generate_series函数,以及一些确保订单正确的技巧:
WITH parameters (n, m) AS
(
VALUES (3, 5)
)
SELECT
xi
FROM
(
SELECT
i, i …Run Code Online (Sandbox Code Playgroud) 让我们以表 peoples 为例,它只有 2 个字段:id 和 data(json)。
SELECT data FROM peoples ;
{"name": "Adam","pos":"DBA","age":22 }
{"name": "Alice","pos":"Security","age":33 }
{"name": "Bob","pos":"Manager","age":42 }
Run Code Online (Sandbox Code Playgroud)
我想为“pos”字段创建约束,它必须是唯一的。我在互联网上搜索了 JSON 约束,但没有结果。
我该如何处理这个问题?
想象一下你有一个简单的表:
name | is_active
----------------
A | 0
A | 0
B | 0
C | 1
... | ...
Run Code Online (Sandbox Code Playgroud)
我需要创建一个特殊的唯一约束,该约束在以下情况下失败:相同is_active值不能共存不同的name值。
允许条件示例:
注意:简单的多列唯一索引不允许这样的组合。
A | 0
A | 0
B | 0
Run Code Online (Sandbox Code Playgroud)
允许条件示例:
A | 0
B | 1
Run Code Online (Sandbox Code Playgroud)
失败条件示例:
A | 0
A | 1
-- should be prevented, because `A 0` exists
-- same name, but different `is_active`
Run Code Online (Sandbox Code Playgroud)
理想情况下,我需要唯一约束或唯一部分索引。触发器对我来说更成问题。
双重A,0允许,但(A,0) (A,1)不是。
所以我觉得这应该是非常基本和容易做的事情,也许我只是没有正确地做事。
我想做相当于 SQL Server 备份的工作。我想创建一个完整的 .bak 文件并能够将数据库恢复到其原始状态。
到目前为止,我已经在 PgAdmin4 中尝试了许多不同的方法来从新创建的数据库创建备份文件。我迁移创建了一堆表的模式,然后对之前创建的文件执行还原。我期望恢复后我创建的所有表都消失了,我希望数据库处于我进行备份时的确切状态。
我尝试了许多不同的选项,例如包括在备份/恢复时保留/不保存数据的创建/删除数据库命令,但没有运气。
任何人都可以帮助我吗?
我正在使用命令pg_dump mydb -Fc > db和pg_restore db. 也许我缺少一些神奇的参数来完成我上面的要求?
试过了pg_restore --clean db,结果一样。
问题是我创建了我的数据库,里面什么都没有,备份它,创建一些表,恢复备份,我创建的表仍然存在。我想要一个恢复方法,使数据库处于与备份时相同的状态。
postgresql ×10
aggregate ×1
functions ×1
json ×1
linux ×1
locking ×1
monitoring ×1
performance ×1
permissions ×1
pgadmin ×1
restore ×1
sql-server ×1
t-sql ×1
trigger ×1