标签: postgresql

PostgreSQL 模式和 search_path

我正在阅读 Oreilly 的PostgreSQL: Up and Running,并且在使用模式组织数据库部分中,它说search_path可以在数据库级别设置:

例如,如果我们希望 contrib 中的所有对象都可以在没有模式限定的情况下访问,我们将更改我们的数据库,如下所示:

ALTER DATABASE mydb SET search_path="$user",public,contrib;

但是,在键入上面的命令后,我仍然无法在public不限定它们的情况下引用其他模式中的表:

ALTER DATABASE auth SET search_path="$user",public,staging;`
\d users
Run Code Online (Sandbox Code Playgroud)

给出:

Did not find any relation named "users".
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用\d staging.users,它会起作用。

SHOW search_path;
Run Code Online (Sandbox Code Playgroud)

给出:

   search_path   
----------------
 "$user",public
Run Code Online (Sandbox Code Playgroud)

是否默认search_pathpostgresql.conf覆盖每个数据库的设置值与ALTER DATABASE ... SET search_path?如果是这样,每个数据库的值有什么用?

schema postgresql

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

使用复合索引时,SELECT 查询中的字段顺序是否重要?

我知道索引本身的列顺序非常重要;但是,使用该索引的后续 SELECT 查询中的列顺序如何?

例如,如果我在 上有一个多列索引[:col_1, :col_2, :col_3],我的 SELECT 语句是否需要看起来像"SELECT * FROM my_table WHERE col_1 = (?), col_2 = (?), col_3 = (?)"以便优化查询?或者我可以按任何顺序指定参数并且查询优化器会处理它?

我已经阅读了一些 类似的答案,但似乎没有一个明确的答案指向文档,并相对于索引进行了回答。一些答案说“没关系”或“效果可以忽略不计”。

我正在 PostgreSQL 上使用 RoR/ActiveRecord,但问题确实适用于任何 SQL/关系数据库。

postgresql index optimization select

8
推荐指数
1
解决办法
2557
查看次数

如何将带有数组字段的表类型传递给 postgresql 中的函数

我有一张桌子叫书

CREATE TABLE book
(
  id smallint NOT NULL DEFAULT 0,       
  bname text,       
  btype text,
  bprices numeric(11,2)[],
  CONSTRAINT key PRIMARY KEY (id )
)
Run Code Online (Sandbox Code Playgroud)

和一个函数 save_book

CREATE OR REPLACE FUNCTION save_book(thebook book)
  RETURNS text AS
$BODY$
DECLARE 
myoutput text :='Nothing has occured';
BEGIN

    update book set 
    bname=thebook.bname,
    btype=thebook.btype,bprices=thebook.bprices  WHERE id=thebook.id;

    IF FOUND THEN
        myoutput:= 'Record with PK[' || thebook.id || '] successfully updated';
        RETURN myoutput;
    END IF;

    BEGIN
        INSERT INTO book values(thebook.id,thebook.bname,thebook.btype,
        thebook.bprices);
        myoutput:= 'Record successfully added';           
    END;
 RETURN myoutput; …
Run Code Online (Sandbox Code Playgroud)

postgresql datatypes functions postgresql-9.1 array

8
推荐指数
2
解决办法
9762
查看次数

PostgreSQL 流与基于文件的复制(在服务器行为和配置方面)

我试图了解 PostgreSQL 复制的最佳用途及其工作原理,以便我可以在生产环境中进行故障排除。

我很难理解这 2 种复制类型在(1)配置(2)2 台服务器主/从在每种情况下如何执行方面的差异

PostgreSQL (9.2+) 上的复制本质上是 16MB 大小的 XLOG 文件(取决于创建每个文件的频率设置)在 Master 上创建并通过某种方法发送到 Slave。

我的设置(针对这个问题)

Postgresql.conf 在 Master
archive_command上的配置 = 'rsync -av %p postgres@[SlaveIP]:[wal_archive_folder]/%f'

在 Slave 上配置 Recovery.conf 以读取日志文件
restore_command = 'cp [wal_archive_folder]/%f \"%p\"'
primary_conninfo = 'host=[MasterIP] port=5432 user=postgres'

我的问题是此配置的哪一部分使这种“流式”复制与“日志传送”不同?我的主服务器配置为使用 rsync 将日志发送到从服务器(此日志是否传送?)我的从服务器配置为能够连接到 recovery.conf 中的主服务器(这是流式传输吗?)

问题的第二部分:发生了什么?我知道通过 WAL_sender 和 WAL_receiver 在 PostgreSQL 上还有另一个协议。但我不清楚这是否仅用于流式传输,如果是,那么在 Master 中如何使用 rsync?

:) 谢谢!!对不起,如果这是一个明显的问题。我一直在做一堆阅读博客/书籍,但很难理解。Postgres wiki 非常深入,需要很长时间才能通读(而且我有截止日期)

postgresql postgresql-9.3

8
推荐指数
1
解决办法
5540
查看次数

大型 VARCHAR 的唯一约束 - PostgreSQL

我有一个列定义如下:

data_url character varying(32768) NOT NULL
Run Code Online (Sandbox Code Playgroud)

和该列的 UNIQUE 约束:

CONSTRAINT unique_data_url UNIQUE (data_url)
Run Code Online (Sandbox Code Playgroud)

当一个大对象被插入到表中时,会出现以下错误信息:

ERROR:  index row requires 32584 bytes, maximum size is 8191
Run Code Online (Sandbox Code Playgroud)

如何设置 PostgreSQL 以便能够索引大于 8191 个字符的对象?空间和速度都不是问题。它是一个很少更改的表,最多有数百行。

环境:PostgreSQL 9.3.6,Fedora 20 x64

postgresql index varchar postgresql-9.3 unique-constraint

8
推荐指数
1
解决办法
4884
查看次数

组角色和登录角色有什么区别?

看起来对于单个用户,我应该创建一个登录角色而不是相应的组角色,因为我无法直接为登录角色分配权限。这是真的吗?这种分离的目的是什么?

此外,据我所知,只能使用login role进行身份验证。那么组角色中密码字段的目的是什么?或者可以作为组角色进行身份验证?那么为什么有人需要登录角色呢?

看起来我也可以在 pg_hba 中设置登录和组角色。

postgresql security

8
推荐指数
1
解决办法
4256
查看次数

将大型 .sql 文件导入 Postgres

我需要导入一个大型数据转储。

结构已经创建。但是数据转储是 16GB 大。

如果我尝试简单

psql -d "DATABASE" < "datadump.sql"
Run Code Online (Sandbox Code Playgroud)

out of memory在 Ubuntu DB 上收到一条消息。

我不知道如何导入。

DB-Server 有 16GB 内存,50GB 可用磁盘空间(它是一个开发者虚拟机)

有谁知道如何导入这个文件?


更新

我的 postgresql.conf

# - Memory -

shared_buffers = 4GB            # min 128kB
                    # (change requires restart)
work_mem = 1048kB           # min 64kB
maintenance_work_mem = 2GB      # min 1MB


checkpoint_segments = 128       # in logfile segments, min 1, 16MB each
#checkpoint_timeout = 5min      # range 30s-1h
checkpoint_completion_target = 0.9  # checkpoint target duration, 0.0 - …
Run Code Online (Sandbox Code Playgroud)

postgresql ubuntu

8
推荐指数
1
解决办法
9448
查看次数

过滤数组 text[] 并按时间戳排序

描述

Linux 上的 PostgreSQL 9.6,tags_tmp表大小~ 30 GB(1000 万行),tags是一个text[]并且只有 6 个值。

tags_tmp(id int, tags text[], maker_date timestamp, value text)
Run Code Online (Sandbox Code Playgroud)
tags_tmp(id int, tags text[], maker_date timestamp, value text)
Run Code Online (Sandbox Code Playgroud)

我需要使用 filter ontagsorder byon检索数据maker_date desc。我可以在两tags & maker_date desc列上创建索引吗?

如果没有,你能提出其他想法吗?

查询示例

select id, tags, maker_date, value
from tags_tmp
where  tags && array['a','b']
order by maker_date desc
limit 5 offset 0
Run Code Online (Sandbox Code Playgroud)

SQL 代码:

create index idx1 on tags_tmp using gin (tags);
create …
Run Code Online (Sandbox Code Playgroud)

postgresql performance order-by index-tuning postgresql-performance

8
推荐指数
1
解决办法
6302
查看次数

PostgreSQL 在许多列上进行全文搜索

我需要一个基于指定字符串搜索记录的建议。

搜索字符串可以包含来自这些列的值。此字符串中的值不必以正确的顺序严格相同,并且此字符串中某些列的值可能会丢失。

搜索字符串示例:

22 Karntner Wien
Run Code Online (Sandbox Code Playgroud)

例如,我得到了前 5 条类似记录的结果。

我想我应该使用全文搜索,但我没有使用它的经验。你能告诉我如何进行吗?

postgresql full-text-search pattern-matching

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

VODKA Indexing的命运如何,死了吗?

我在网上看到很多关于 PostgreSQLVodka 索引的提及。

在维基上它被定义为,

(Korotkov) Vodka 维护着两个索引文件,一个用于键,一个用于堆项目指针(发布)。实际上,每个索引文件都可以由不同的访问方法管理。这是 GIN 的概括,它使用 btree(尽管是它自己的 btree 代码,而不是 src/backend/access/nbtree)作为键和发布。键索引文件具有指向发布索引文件的项目指针。当postings 文件的访问方法需要移动一个索引项时,它必须安排更新keys 文件中的任何项指针。为此,提出了一个新的“amupdateiptr”访问方法功能。必要时,对该函数的调用将在 amgettuple 调用后立即到达。

除此之外,您可以在列表中看到这篇文章

我们正在走向以 postgres 为中心的公司,我们将继续在该公司发展。我们当然不需要为我们的国家产品 VODKA 提供资金:) 我想过众筹,但没有找到任何类似于 postgres 的产品的好案例。所以,我们决定走传统方式——建立我们自己的公司并从行业中赚钱。简而言之,我们推迟了我们的开发,因为许多其他非开发人员的业务,但从长远来看,我们将为 postgres 项目提供更多俄罗斯贡献者。Postgres 在俄罗斯是流行的数据库,但现在它从商业和政府那里得到了更多的利益,所以我很乐观。

这到底发生了什么,它是死了还是被合并到了别的东西里?

postgresql index

8
推荐指数
1
解决办法
1024
查看次数