升级 Postgres的标准程序似乎要求我临时运行旧版本和新版本。这意味着我必须更改旧版本的端口。
考虑到我如何pg_upgrade准确地告诉在哪里可以找到数据目录,这似乎完全没有必要,它可以直接读取所有数据。
这真的是升级的唯一方法(除了转储/恢复),还是我误解了什么?难道我不能只要求升级者直接转换所有二进制数据文件,而不用弄乱用户、密码和端口吗?
我需要在我的数据库上加载 uuid 扩展,这是在运行时创建的。创建数据库的用户不是超级用户,她只有“CREATEDB”权限。
有没有办法做到这一点?谢谢。
我在 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 扩展为索引位串最多 1000 位。(这些位串是通过量化高维向量创建的,因此每个维度最多分配 4 位)。插入很少见,而搜索是最常用的操作。在搜索中,我想获取与位字符串完全匹配的所有行。
对于 GIN 来说,这看起来是一个完美的工作(结合我自己的数据类型),或者你怎么看?
postgresql performance index index-tuning postgresql-performance
为什么 PostgreSQL 选择大象作为它的标志?从logo wiki 中不清楚。
更新:现在维基更新:) 谢谢!
我有两张这样的表:
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
我很幸运能够使用运行 64 位 Ubuntu 的 20GB Linode 实例。我想尝试为此服务优化 PostGres,但我不知道我应该优先更改什么。
我有几个大约 20,000 行的数据集,正在执行的计算是内存密集型查询(空间分析),每次请求后都会写入少量行。用户总数非常少(10 - 50)。
我已经阅读了 Postgresql 站点上的这篇文章,但我对它的工作原理知之甚少,不知道我应该优先考虑什么。我还查看了有关在此处更改地理类型工作的建议。
例如,我尝试将 更改shared_buffers为200MB(远小于 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)
我的问题是我不知道我应该尝试改变哪些值,或者我应该如何优先考虑哪些值是试验和测试的关键。我应该具体做什么来优化这个数据库?
所以这可能是一个愚蠢的问题,但我真的很陌生。所以我在 postgres 服务器上创建一个 Postgres 数据库,我用这个命令启动:
sudo -u postgres psql
Run Code Online (Sandbox Code Playgroud)
然后我做了以下命令:
CREATE DATABASE database;
Run Code Online (Sandbox Code Playgroud)
据说创建了数据库。但是这个数据库在哪里?我在哪里可以在我的电脑上找到它?
首先让我们说,我是 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) 我的任务是使 postgres 表与非 postgres 表保持同步。非 postgres 表有 1600 多列。当我尝试在 postgres 中创建表时,我得到:
错误:表最多可以有 1600 列
我想知道是否可以提高最大列数。是否有我可以更改的配置变量?我是否必须使用特殊选项编译 postgres?最大列数是 1600 而不是 1700 有充分的理由吗?
我在谷歌上搜索过这个答案,所有的答案基本上都是:“你永远不应该有一张有 1600 列的表格”。
postgresql ×10
performance ×2
aggregate ×1
group-by ×1
index ×1
index-tuning ×1
memory ×1
plpgsql ×1
schema ×1
upgrade ×1
upsert ×1