标签: postgresql

PostgreSQL 模式名称的有效格式是什么?

我似乎找不到描述 PostgreSQL 模式名称有效格式的文档。我知道架构名称不能:

  • 以数字开头
  • 有空格
  • 从...开始 pg_

还有什么?我应该在哪里看?

postgresql

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

以最短的停机时间将 heroku 数据库迁移到 Amazon RDS

我有一个 heroku postgres 数据库,想将它迁移到 Amazon RDS 以节省成本。有什么方法可以最大限度地减少停机时间?通常这涉及实时复制数据库,然后将复制的 DB 提升为主 DB。

我知道我可以使用跟随者数据库在 heroku 中迁移数据库,我可以使用只读副本数据库在 Amazon RDS 中迁移数据库。是否有类似的方法来创建位于我自己的 Amazon RDS 中的 heroku DB 的数据库复制?

postgresql replication heroku

15
推荐指数
1
解决办法
6537
查看次数

如何在没有超级用户的情况下查看 pg_stat_activity 中另一个会话的查询?

我有一个 Postgresql 9.2 数据库。在此数据库上创建了两个用户。当我以超级用户身份执行以下查询时,我可以看到所有内容。

select * from pg_stat_activity
Run Code Online (Sandbox Code Playgroud)

但是,是否可以在不以超级用户身份连接的情况下获得相同的结果?

我应该授予/创建哪个权限/角色以获得超级用户可以看到的结果?

postgresql permissions role postgresql-9.2

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

带有 WHERE 条件和 GROUP BY 的 SQL 查询索引

我正在尝试确定哪些索引用于带有WHERE条件的 SQL 查询,GROUP BY而当前运行速度很慢。

我的查询:

SELECT group_id
FROM counter
WHERE ts between timestamp '2014-03-02 00:00:00.0' and timestamp '2014-03-05 12:00:00.0'
GROUP BY group_id
Run Code Online (Sandbox Code Playgroud)

该表目前有 32.000.000 行。当我增加时间范围时,查询的执行时间会增加很多。

有问题的表如下所示:

CREATE TABLE counter (
    id bigserial PRIMARY KEY
  , ts timestamp NOT NULL
  , group_id bigint NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

我目前有以下索引,但性能仍然很慢:

CREATE INDEX ts_index
  ON counter
  USING btree
  (ts);

CREATE INDEX group_id_index
  ON counter
  USING btree
  (group_id);

CREATE INDEX comp_1_index
  ON counter
  USING btree
  (ts, group_id);

CREATE INDEX comp_2_index
  ON counter …
Run Code Online (Sandbox Code Playgroud)

postgresql performance index optimization postgresql-9.3 query-performance

15
推荐指数
3
解决办法
3081
查看次数

数据库所有者的特权;应用用户

快速版本:

我应该发出什么命令来启用数据库所有者以允许它访问此数据库中的表,并且这可以从该所有者的帐户中完成吗?


更长的版本:

我正在 RDS 上创建一个数据库。我有一个在亚马逊上配置的“root”用户。

Amazon 会自动创建组角色“rds_superuser”,该角色非常有特权,但实际上并不是超级用户。

我正在为应用程序创建一个数据库和用户,如下所示:

create database master_integration;
CREATE ROLE master_application LOGIN ENCRYPTED PASSWORD '...' VALID UNTIL 'infinity';
GRANT ALL ON DATABASE master_integration TO GROUP rds_superuser WITH GRANT OPTION;
GRANT ALL ON DATABASE master_integration TO GROUP master_application;

\c master_integration;
ALTER DEFAULT PRIVILEGES GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES TO rds_superuser;
Run Code Online (Sandbox Code Playgroud)

我更新了这个脚本以反映 Craig Ringer 关于我应该如何处理这个问题的建议。

当应用程序连接(使用 master_application 凭据)时,它会创建(并因此拥有)这些表。

我的问题是我不能使用我的管理 (rootish) 登录来运行查询,因为该用户在表上没有权限。

我以前通过从应用程序帐户运行以下命令来解决这个问题:

GRANT ALL privileges ON ALL TABLES IN SCHEMA public to rds_superuser; …
Run Code Online (Sandbox Code Playgroud)

postgresql amazon-rds

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

PostgreSQL 中的多个主键

我有下表:

CREATE TABLE word(
word CHARACTER VARYING NOT NULL,
id BIGINT NOT NULL,
repeat INTEGER NOT NULL
);
ALTER TABLE public.word OWNER TO postgres;
ALTER TABLE ONLY  word ADD CONSTRAINT "ID_PKEY" PRIMARY KEY (word,id);
Run Code Online (Sandbox Code Playgroud)

当我尝试使用以下命令恢复它时:

psql -U postgres -h localhost -d word -f word.sql 
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误:

不允许表“word”的多个主键

如何在 postgres 中使用多个主键?

postgresql primary-key

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

优化大型数据库查询(25+ 百万行,使用 max() 和 GROUP BY)

我正在使用 Postgres 9.3.5 并且我在数据库中有一个大表,目前它有超过 2500 万行,而且它往往会迅速变大。我正在尝试使用一个简单的查询来选择特定的行(所有unit_ids 都只有最新unit_timestamp的),例如:

SELECT unit_id, max(unit_timestamp) AS latest_timestamp FROM all_units GROUP BY unit_id;
Run Code Online (Sandbox Code Playgroud)

在没有任何索引的情况下,此查询大约需要 35 秒才能执行。定义索引 ( CREATE INDEX partial_idx ON all_units (unit_id, unit_timestamp DESC);) 后,查询时间缩短到(仅)19 秒左右。

我想知道是否有可能在更短的时间内(比如几秒钟)执行我的查询,如果是这样,我应该采取哪些步骤来进一步优化它?

我的表结构转储如下所示:

CREATE TABLE "all_units" (
"unit_id" int4 NOT NULL,
"unit_timestamp" timestamp(6) NOT NULL,
"lon" float4,
"lat" float4,
"speed" float4,
"status" varchar(255) COLLATE "default"
)
ALTER TABLE "all_units" ADD PRIMARY KEY ("unit_id", "unit_timestamp");
Run Code Online (Sandbox Code Playgroud)

EXPLAIN (ANALYZE, BUFFERS)如下:

QUERY PLAN
---------------------------------------------------------------------------------------------------------------------------------
HashAggregate  (cost=663998.38..664069.73 rows=7135 …
Run Code Online (Sandbox Code Playgroud)

postgresql performance index query-performance

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

PostgreSQL 抱怨共享内存,但共享内存似乎没问题

我一直在执行一种密集的模式删除和通过 PostgreSQL 服务器创建,但现在抱怨..:

WARNING:  out of shared memory
ERROR:  out of shared memory
HINT:  You might need to increase max_locks_per_transaction.
Run Code Online (Sandbox Code Playgroud)

但是如果 PostgreSQL 只是用 重新启动,问题仍然存在service postgresql restart,我怀疑 max_locks_per_transaction 不会调整任何内容。

我有点疏远,因为此错误的故障排除列表对我不起作用。

更多信息 1409291350:缺少一些细节,但我保留了核心 SQL 结果。

postgres=# SELECT version();
PostgreSQL 9.3.5 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2,
 64-bit
Run Code Online (Sandbox Code Playgroud)

和:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.1 LTS
Release:        14.04
Codename:       trusty
Run Code Online (Sandbox Code Playgroud)

schema postgresql memory

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

将 PG 中的现有列更改为自动增量主键

我在 Postgresql 中有一个数据库,它是从 SQL Server 迁移过来的(只有数据)。
在 SQL Server 上,此数据库中的表具有以下列:

measure_id
datum
measure
Run Code Online (Sandbox Code Playgroud)

其中measure_id是自动增量主键,datum是日期时间,measure是浮点数。
在 Postrgresql 中迁移后,measure_id是 bigint 类型的列。

measure_id既然我的表充满了数据,我该如何将此列 ( )更改为 bigserial 并将其指定为主键?

postgresql migration postgresql-9.3

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

PostgreSQL 过程语言开销(plpython/plsql/pllua...)

我试图实时任务的过程语言性能中查找有关 PostgreSQL用户定义函数的信息。

  1. 它们与内置函数相比如何?
  2. Postgres 如何调用/管理 plpython vs plpgsql vs pllua 函数(我对 Postgres 集成/上下文/数据传输方面,而不是 VM 本身感兴趣)有什么区别(在开销上)?
  3. 上下文是一个很大的开销吗?我可以将它用于实时数据映射吗(假设 1000 次查询/秒))
  4. 在 plpgsql 和其他 pg/语言中编写用户定义的函数有什么好处吗?在文档中,他们列举了优点,但我认为它们适用于所有 postgresql 过程语言。

相关发现:

postgresql plpgsql plpython

15
推荐指数
3
解决办法
6283
查看次数