我不认为我今天喝了足够的咖啡,但出于某种原因坚持了下来。
试图获取每个单词的第一个字母,除了几个停用词。
示例“美利坚合众国”->“美国”
select regexp_matches('The United States of America', '\y(?!(the|of)\y)\w', 'gi')
工作正常,但它返回setof text[]
.
如何将其转换为简单的字符串?还是有比这更好的方法regexp_matches
?
我不认为我今天喝了足够的咖啡,但出于某种原因坚持了下来。
试图获取每个单词的第一个字母,除了几个停用词。
示例“美利坚合众国”->“美国”
select regexp_matches('The United States of America', '\y(?!(the|of)\y)\w', 'gi')
工作正常,但它返回setof text[]
.
如何将其转换为简单的字符串?还是有比这更好的方法regexp_matches
?
这是我目前正在使用的:
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);
有更快的方法吗?
我已经阅读了文档和一些博客文章,但我仍然不明白扩展文件名中的“未打包”标签是做什么用的。
什么时候用,什么时候不用?
Postgres 可以在文本搜索中使用与 Ispell 兼容的字典,但不提供所需的文件。
我正在考虑将用户的 OID 存储在表的“所有者”列中,因此如果他们更改用户名,我无需执行任何操作。
我知道可以将 pg_has_role() 与 OID 一起使用,这很好。
是否有一种快速简便的方法来获取当前用户的 OID,而无需将其与其中一个系统表进行匹配?
假设我有两个 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
我想编写一个高性能函数,它返回 maxwell 所属的角色(最好是他们的 oid)列表,如下所示:
create or replace function get_all_roles() returns oid[] ...
它应该返回 maxwell、authors 和 editors(但不是 ernest)的 oid。
但是我不确定当有继承时该怎么做。
假设我有一个 Windows 用户环境变量 SOME_STRING。
是否可以在 PL/pgSQL 函数中使用它的值?
如果没有,我是否需要使用不受信任的语言(如 PL/pythonu)或者我可以使用受信任的语言吗?
我在 PG 9.2
尝试对单个 Postgres 服务器 (Win7 64) 进行每小时增量备份。
我有以下设置postgresql.conf
:
max_wal_senders = 2
wal_level = archive
archive_mode = on
archive_command = 'copy "%p" "c:\\postgres\\foo\\%f"'
(重新开始)
我做了一个基础备份pg_basebackup -U postgres -D ..\foo -F t -x
它在文件夹中创建了一个大base.tar
文件foo
并添加了一些 16,384 KB 的文件,我认为这些文件是 WAL。
我不明白的是为什么 WALfoo
没有改变。变化中的 WAL data/pg_xlog
。pg 不应该复制它们吗?它是如何决定这样做的?
也许我需要设置archive_timeout=3600
?
我见过几个网站(pg 的邮件列表、bacula 的 postgres 页面)说您需要调用 pg_start_backup() 和 pg_stop_backup(),但我相信这些不是必需的。真的吗?
次要问题:
WAL 多久data/pg_xlog
写一次?什么触发了写入?
\q
如果我在 psql 中执行一些 DML,它似乎会更新 WAL 。或者在 pgAdmin 中编辑一个表,然后关闭窗口。我认为它会在提交时写入。
最佳实践?pg_basebackup 每周一次?将 WAL 归档到与 PG 或远程机器相同的机器上?
目的是找到父母,因为它是孩子。例如,假设您有一个营销包(也称为“组合”),并希望根据其中的产品来匹配它。示例表/数据:
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);
给定产品 1、2、3,我想获得 marketing_package 1。但仅给定产品 1,2 我不想要 marketing_package 1。
是否有此类查询的名称,最有效的方法是什么?
我想在主服务器上使用 InnoDB,因为它的事务能力,但在从服务器上使用 MyISAM 以获得全文搜索能力。这可能吗?
假设您是汽车经销商,销售汽车。
当客户购买新车时,他通常会用现有的汽车进行交易。
哪种数据模型更有意义?
A)为销售创建一个销售订单记录,为以旧换新创建一个采购订单记录,并将它们链接在一起(related_order_id)?
b) 为销售创建销售订单记录,为以旧换新创建销售订单调整?
C)还有什么?
这些是我想到的选项:
点网戴夫:
UPDATE mytable set f1=newval where id=666 and f1 := f1ValueFromSelect
查理校验和:
UPDATE mytable set f1=newval where id=666 and md5(concat(id,f1)) := checksumFromSelect
蒂莫西时间戳:
UPDATE mytable set f1=newval where id=666 and mytimestampfield := timestampFromSelect
维罗妮卡版本:
UPDATE mytable set f1=newval, version=version+1 where id=666 and version=versionFromSelect
我喜欢 Dave,因为不需要更改架构。但是必须将所有记录的原始数据保留在客户端上。如何比较斑点?
查理擅长发送给客户的数据较少。不确定 blob/clob 的性能
Tim 和 Veronica 非常简单,但可能需要更改架构。时间戳看起来更加万无一失。它的跨平台性如何?
谢谢!
如何使外部全文引擎(Lucene、Solr 等)与数据库数据保持同步?例如,跟踪插入、删除、更新。
我当前的解决方案涉及对修改记录的大联合所有查询,Lucene 每隔几分钟就会轮询一次。
有更好的解决方案吗?
谢谢!
您在数据库中实现软删除的方法是什么?
理想情况下,该解决方案将允许
谢谢!