标签: postgresql

在不弄乱端口的情况下升级 postgre?

升级 Postgres的标准程序似乎要求我临时运行旧版本和新版本。这意味着我必须更改旧版本的端口。

考虑到我如何pg_upgrade准确地告诉在哪里可以找到数据目录,这似乎完全没有必要,它可以直接读取所有数据。

这真的是升级的唯一方法(除了转储/恢复),还是我误解了什么?难道我不能只要求升级者直接转换所有二进制数据文件,而不用弄乱用户、密码和端口吗?

postgresql upgrade

7
推荐指数
1
解决办法
337
查看次数

以非超级特权用户身份创建 UUID 扩展

我需要在我的数据库上加载 uuid 扩展,这是在运行时创建的。创建数据库的用户不是超级用户,她只有“CREATEDB”权限。

有没有办法做到这一点?谢谢。

postgresql postgresql-extensions

7
推荐指数
1
解决办法
4319
查看次数

UPSERT 函数中的复合类型问题

我在 PostgreSQL 9.1 中有一个名为fun_test. 它有一个复合类型作为输入参数,我在调用它时不断收到转换错误。

CREATE OR REPLACE FUNCTION netcen.fun_test(myobj netcen.testobj)
  RETURNS boolean AS
$BODY$
DECLARE 
tmp_code smallint;
cur_member refcursor;
BEGIN
-- Check if the member exists first
OPEN cur_member FOR 
EXECUTE 'SELECT testkey FROM netcen.test WHERE testkey=' || myobj.testkey ;
FETCH cur_member INTO tmp_code;
CLOSE cur_member;
CASE tmp_code
    WHEN COALESCE(tmp_code,0)=0 THEN
    -- Record not found INSERT a new record
    -- will skip user defined validation for now
    insert into netcen.test values(myobj.testkey,
    myobj.tes,
    myobj.testname);

    ELSE
    -- Record found …
Run Code Online (Sandbox Code Playgroud)

postgresql plpgsql postgresql-9.1 upsert

7
推荐指数
2
解决办法
895
查看次数

使用 GIN 索引位串

我正在尝试将 PostgreSQL 扩展为索引位串最多 1000 位。(这些位串是通过量化高维向量创建的,因此每个维度最多分配 4 位)。插入很少见,而搜索是最常用的操作。在搜索中,我想获取与位字符串完全匹配的所有行。

对于 GIN 来说,这看起来是一个完美的工作(结合我自己的数据类型),或者你怎么看?

postgresql performance index index-tuning postgresql-performance

7
推荐指数
1
解决办法
3536
查看次数

为什么 PostgreSQL 选择大象作为它的标志?

为什么 PostgreSQL 选择大象作为它的标志?从logo wiki 中不清楚

更新:现在维基更新:) 谢谢!

postgresql

7
推荐指数
2
解决办法
2778
查看次数

GROUP BY 和 ORDER BY 问题

我有两张这样的表:

CREATE TABLE cmap5 (
   name     varchar(2000),
   lexemes  tsquery
);
Run Code Online (Sandbox Code Playgroud)

CREATE TABLE IF NOT EXISTS synonyms_all_gin_tsvcolumn (
   cid       int NOT NULL,  -- REFERENCES pubchem_compounds_index(cid)
   name      varchar(2000) NOT NULL,  
   synonym   varchar(2000) NOT NULL,
   tsv_syns  tsvector,
   PRIMARY KEY (cid, name, synonym)
);
Run Code Online (Sandbox Code Playgroud)

我目前的查询是:

SELECT s.cid, s.synonym, c.name, ts_rank(s.tsv_syns,c.lexemes,16) 
FROM synonyms_all_gin_tsvcolumn s, cmap5 c
WHERE c.lexemes @@ s.tsv_syns
Run Code Online (Sandbox Code Playgroud)

输出是:

cid     |  synonym                              | name (query)              | rank
5474706 | 10-Methoxyharmalan                    | 10-methoxyharmalan        | 0.0901673
1416    | (+/-)12,13-EODE                       | 12,13-EODE                | 0.211562
5356421 …
Run Code Online (Sandbox Code Playgroud)

postgresql aggregate full-text-search group-by greatest-n-per-group

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

我应该如何为 20 GB 的 RAM 调整 Postgresql?

我很幸运能够使用运行 64 位 Ubuntu 的 20GB Linode 实例。我想尝试为此服务优化 PostGres,但我不知道我应该优先更改什么。

我有几个大约 20,000 行的数据集,正在执行的计算是内存密集型查询(空间分析),每次请求后都会写入少量行。用户总数非常少(10 - 50)。

我已经阅读了 Postgresql 站点上的这篇文章,但我对它的工作原理知之甚少,不知道我应该优先考虑什么。我还查看了有关在此处更改地理类型工作的建议。

例如,我尝试将 更改shared_buffers200MB(远小于 20GB 的 75%)。这导致了以下错误消息:

  • 重启 PostgreSQL 9.1 数据库服务器
    • PostgreSQL 服务器启动失败。请检查日志输出:2013-03-10 12:21:58 EDT FATAL:无法创建共享内存段:无效参数 2013-03-10 12:21:58 EDT 详细信息:失败的系统调用是 shmget(key=5432001 , 大小 = 47742976, 03600)。2013-03-10 12:21:58 EDT 提示:此错误通常意味着 PostgreSQL 对共享内存段的请求超出了内核的 SHMMAX 参数。您可以减小请求大小或使用更大的 SHMMAX 重新配置内核。要减少请求大小(当前为 47742976 字节),请减少 PostgreSQL 的共享内存使用量,可能是通过减少 shared_buffers 或 max_connections。如果请求大小已经很小,它可能小于内核的 SHMMIN 参数,在这种情况下,需要提高请求大小或重新配置 SHMMIN。PostgreSQL 文档包含有关共享内存配置的更多信息。

我将其恢复为原始值并尝试更改:

work_mem = 50MB
maintenance_work_mem = 256MB 
Run Code Online (Sandbox Code Playgroud)

我的问题是我不知道我应该尝试改变哪些值,或者我应该如何优先考虑哪些值是试验和测试的关键。我应该具体做什么来优化这个数据库?

postgresql performance memory

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

PostgreSQL 数据库存储在我的计算机上的什么位置?

所以这可能是一个愚蠢的问题,但我真的很陌生。所以我在 postgres 服务器上创建一个 Postgres 数据库,我用这个命令启动:

sudo -u postgres psql
Run Code Online (Sandbox Code Playgroud)

然后我做了以下命令:

CREATE DATABASE database;
Run Code Online (Sandbox Code Playgroud)

据说创建了数据库。但是这个数据库在哪里?我在哪里可以在我的电脑上找到它?

postgresql

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

PostgreSql 中的表继承是否适合这种情况?

首先让我们说,我是 PSQL 的新手并且来自 MSSQL 背景。我开始在 PSQL 中设计一个数据库。

所以我的主要目标是在这个数据库中有一个主模式,我将用它来控制某些服务,并有多个模式链接到这个,这将是不同的客户端数据。

我已经阅读了表继承,但从来没有遇到过任何人使用继承的效果类似于 DB Migrations 的效果。我想要实现的基本上是有一个默认架构,客户端架构都继承自默认架构。这对我来说,只需更改一个模式,就可以控制创建/删除/更改所有模式的对象。

这可行吗?有没有其他人有过做类似事情的经验?有人有什么建议吗?

更新

这就是我所做的。但是,我的印象是,如果您查看下面的代码,我需要做的就是模式“client1”,但是我错了。:D

所以无论如何,下面是我所做的脚本,它应该处理我现在需要的一切 - 我将使用脚本作为“client2”模式。是好是坏?

-- public schema --
CREATE TABLE public.Users (
   Id bigserial primary key,
   Login text unique,
   check (false) NO INHERIT 
);

CREATE TABLE public.Roles (
   Id bigserial primary key,
   RoleName text unique,
   check (false) NO INHERIT 
);

CREATE TABLE public.UserRoles (
   Id bigserial primary key,
   UserId bigint references users(id),
   RoleId bigint references roles(id),
   unique (UserId, RoleId),
   check (false) NO INHERIT 
);


-- client1 …
Run Code Online (Sandbox Code Playgroud)

schema postgresql database-design

7
推荐指数
1
解决办法
4635
查看次数

在 Postgresql 中,是否可以更改表可以具有的最大列数?

我的任务是使 postgres 表与非 postgres 表保持同步。非 postgres 表有 1600 多列。当我尝试在 postgres 中创建表时,我得到:

错误:表最多可以有 1600 列

我想知道是否可以提高最大列数。是否有我可以更改的配置变量?我是否必须使用特殊选项编译 postgres?最大列数是 1600 而不是 1700 有充分的理由吗?

我在谷歌上搜索过这个答案,所有的答案基本上都是:“你永远不应该有一张有 1600 列的表格”。

postgresql

7
推荐指数
1
解决办法
4399
查看次数