假设我有两个 Postgresql 数据库组,“authors”和“editors”,以及两个用户,“maxwell”和“ernest”。
create role authors;
create role editors;
create user maxwell;
create user ernest;
grant authors to editors; --editors can do what authors can do
grant editors to maxwell; --maxwell is an editor
grant authors to ernest; --ernest is an author
Run Code Online (Sandbox Code Playgroud)
我想编写一个高性能函数,它返回 maxwell 所属的角色列表(最好是他们的 oid),如下所示:
create or replace function get_all_roles() returns oid[] ...
Run Code Online (Sandbox Code Playgroud)
它应该返回 maxwell、authors 和 editors(但不是 ernest)的 oid。
但是当有继承时,我不知道该怎么做。
根据https://devcenter.heroku.com/articles/heroku-postgres-legacy-plans,连接限制为 500
根据https://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server “通常,良好硬件上的 PostgreSQL 可以支持几百个连接”
这个限制的决定因素是什么?#CPU核心?内存?操作系统?
尝试对单个 Postgres 服务器(Win7 64)进行每小时增量备份。
我有以下设置postgresql.conf:
max_wal_senders = 2
wal_level = archive
archive_mode = on
archive_command = 'copy "%p" "c:\\postgres\\foo\\%f"'
Run Code Online (Sandbox Code Playgroud)
(重新开始)
我做了一个基本备份 pg_basebackup -U postgres -D ..\foo -F t -x
它在base.tar文件foo夹中创建了一个大文件并添加了一些 16,384 KB 的文件,我认为这些文件是 WAL。
我不明白的是为什么 WALfoo不会改变。data/pg_xlog变化中的 WAL 。pg 不应该复制它们吗?它是如何决定这样做的?
也许我需要设置archive_timeout=3600?
我见过几个站点(pg 的邮件列表、bacula 的 postgres 页面)说您需要调用 pg_start_backup() 和 pg_stop_backup(),但我相信这些不是必需的。真的吗?
次要问题:
多久data/pg_xlog写入一次 WAL ?什么触发写入?
如果我\q在 psql 中执行一些 DML,它似乎会更新 WAL 。或者在 pgAdmin 中编辑一个表,然后关闭窗口。我认为它会在提交时写入。
最佳实践?pg_basebackup 每周一次?将 …
我想在 master 上使用 InnoDB,因为它的事务能力,但 MyISAM 在 slaves 上使用全文搜索能力。这可能吗?
假设我有一个 Windows 用户环境变量 SOME_STRING。
是否可以在 PL/pgSQL 函数中使用它的值?
如果没有,我是否需要使用不受信任的语言(如 PL/pythonu),或者我可以使用受信任的语言吗?
我在 PG 9.2
这是我目前正在使用的:
CREATE FUNCTION array_intersect(a1 anyarray, a2 anyarray)
RETURNS anyarray AS
$$
SELECT ARRAY(
SELECT unnest($1)
INTERSECT SELECT unnest($2)
ORDER BY 1
);
$$ LANGUAGE sql
IMMUTABLE STRICT;
--get the length:
select array_length ( array_intersect(array[...], array[...]), 1);
Run Code Online (Sandbox Code Playgroud)
有没有更快的方法?
您在数据库中实现软删除的方法是什么?
理想情况下,该解决方案将允许
谢谢!
我正在考虑将用户的 OID 存储在表的“所有者”列中,因此如果他们更改了用户名,我无需执行任何操作。
我知道可以将 pg_has_role() 与 OID 一起使用,这很好。
是否有一种快速简便的方法来获取当前用户的 OID,而无需将其与系统表之一进行匹配?
您如何使外部全文引擎(Lucene、Solr 等)与数据库数据保持同步?例如,跟踪插入、删除、更新。
我当前的解决方案涉及对修改记录的大联合所有查询,Lucene 每隔几分钟轮询一次。
有什么更好的解决方案吗?
谢谢!
Postgres 可以在文本搜索中使用 Ispell 兼容的字典,但不提供所需的文件。
目的是找到父母,因为它是孩子。例如,假设您有一个营销包(又名“组合”),并希望根据其中的产品进行匹配。示例表/数据:
create table marketing_package_product (
package_id int not null references marketing_package(id),
product_id int not null references product(id),
primary key (package_id, product_id)
);
insert into marketing_package_product values
(1,1),
(1,2),
(1,3),
(2,1),
(2,5);
Run Code Online (Sandbox Code Playgroud)
给定产品 1,2,3,我想获得 marketing_package 1。但只给定产品 1,2,我不想要 marketing_package 1。
这种类型的查询是否有名称,最有效的方法是什么?
假设您是汽车经销商,销售汽车。
当客户购买新车时,他经常以现有的汽车进行交易。
什么数据模型更有意义?
A) 为销售创建一个销售订单记录,为以旧换新创建一个采购订单记录,并将它们链接在一起(related_order_id)?
B) 为销售创建销售订单记录,并为以旧换新的销售订单调整?
C) 还有什么?
我正在尝试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 ×8
mysql ×2
performance ×2
users ×2
windows ×2
array ×1
backup ×1
delete ×1
innodb ×1
linux ×1
myisam ×1
plpgsql ×1
replication ×1
role ×1
unix ×1