我似乎找不到描述 PostgreSQL 模式名称有效格式的文档。我知道架构名称不能:
pg_还有什么?我应该在哪里看?
我有一个 heroku postgres 数据库,想将它迁移到 Amazon RDS 以节省成本。有什么方法可以最大限度地减少停机时间?通常这涉及实时复制数据库,然后将复制的 DB 提升为主 DB。
我知道我可以使用跟随者数据库在 heroku 中迁移数据库,我可以使用只读副本数据库在 Amazon RDS 中迁移数据库。是否有类似的方法来创建位于我自己的 Amazon RDS 中的 heroku DB 的数据库复制?
我有一个 Postgresql 9.2 数据库。在此数据库上创建了两个用户。当我以超级用户身份执行以下查询时,我可以看到所有内容。
select * from pg_stat_activity
Run Code Online (Sandbox Code Playgroud)
但是,是否可以在不以超级用户身份连接的情况下获得相同的结果?
我应该授予/创建哪个权限/角色以获得超级用户可以看到的结果?
我正在尝试确定哪些索引用于带有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
快速版本:
我应该发出什么命令来启用数据库所有者以允许它访问此数据库中的表,并且这可以从该所有者的帐户中完成吗?
更长的版本:
我正在 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) 我有下表:
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 中使用多个主键?
我正在使用 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 服务器创建,但现在抱怨..:
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) 我在 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 ×10
index ×2
performance ×2
amazon-rds ×1
heroku ×1
memory ×1
migration ×1
optimization ×1
permissions ×1
plpgsql ×1
plpython ×1
primary-key ×1
replication ×1
role ×1
schema ×1