我正在升级到 Postgres 9.2.2(从 9.1.4)。当我尝试使用以下方法升级数据库时:
pg_upgrade -b /usr/local/Cellar/postgresql/9.1.4/bin -B /usr/local/Cellar/postgresql/9.2.2/bin -d /usr/local/var/postgres91 -D /usr/local/var/postgres
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
Performing Consistency Checks
-----------------------------
Checking current, bin, and data directories ok
There seems to be a postmaster servicing the old cluster.
Please shutdown that postmaster and try again.
Failure, exiting
Run Code Online (Sandbox Code Playgroud)
我正在尝试停止服务器,但无法使升级命令起作用。如何关闭旧的邮政局长?
假设您有这样的nodes表:
CREATE TABLE nodes
(
node serial PRIMARY KEY,
parent integer NULL REFERENCES nodes(node),
ts timestamp NOT NULL DEFAULT now()
);
Run Code Online (Sandbox Code Playgroud)
它代表了一个标准的类似节点的树结构,根节点在顶部,几个子节点悬挂在根节点或其他子节点上。
让我们插入几个示例值:
INSERT INTO nodes (parent)
VALUES (NULL), (NULL), (NULL), (NULL), (1), (1), (1), (1), (6), (1)
, (6), (9), (6), (6), (3), (3), (3), (15);
Run Code Online (Sandbox Code Playgroud)
现在我想检索前 10 个根节点及其所有子节点,深度为 4:
WITH RECURSIVE node_rec AS
(
(SELECT 1 AS depth, * FROM nodes WHERE parent IS NULL LIMIT 10)
UNION ALL
SELECT depth + 1, n.*
FROM nodes …Run Code Online (Sandbox Code Playgroud) 尝试向NOT NULL具有 10 亿行的表添加约束。我无法承受超过几秒钟的表锁。有没有办法在alter table 语句期间防止全表扫描?我在列上创建了一个索引,希望它能被使用,但这似乎不起作用。可能是检查约束?其他选择?谢谢!
是否有关于数据库、表和字段名称大小写的官方 PostreSQL 约定?
将在官方网站上的例子表明一个小写字母和_单词的分离,我不知道这个策略是否正式。
CREATE TABLE films (
code char(5) CONSTRAINT firstkey PRIMARY KEY,
title varchar(40) NOT NULL,
did integer NOT NULL,
date_prod date,
kind varchar(10),
len interval hour to minute
);
Run Code Online (Sandbox Code Playgroud) 我正在使用 postgres SAVEPOINT,它在当前事务中创建一个新的保存点,并希望在连接中显示当前定义的保存点列表。
更准确地说:我想检查哪个名称不会在连接中触发“没有这样的保存点”错误。
我有一个当前在 EC2 上运行的数据库。由于我必须将它移到更大的机器上,因此出现了使用 RDS 的问题。
价钱:
我可以按需获得带有两个 SSD(每个 16GB)、两个 vCPU 和 4GB 内存的EC2 c3.large实例,价格为每小时 0.132 美元[1]。
最接近的(考虑价格)RDS机器db.m3.medium每小时 0.125 美元(单可用区)[2]。这台机器有相同数量的内存,但只有一个 vCPU [3]。此外,我将不得不为存储和 io [2]付费。
因此,这两个的价格将非常相似。
EC2 的优势:
RDS的优势:
RDS 能否覆盖 EC2 的优势(尤其是 2.)?还有其他优点吗?
我有一个VIEW我正在尝试为其创建进化脚本的地方,因此我可以向其中添加一列。那部分工作正常;列添加就好了。但是,反过来不起作用;删除最后添加的列失败并显示一条ERROR: cannot drop columns from view消息。问题是这个特定的视图有很多引用,从和到,因此我不能只是DROP CASCADE该死的东西!
是否有原因我无法从给定中删除新添加的列VIEW?那么,我该怎么做才能完成这个任务呢?
(注意:这里的情况就是它们的样子,但我可以很好地看到类似的情况,也就是在许多其他情况下从视图中删除列。)
WITH 上的PostgreSQL 文档显示了以下示例:
WITH regional_sales AS (
SELECT region, SUM(amount) AS total_sales
FROM orders
GROUP BY region
), top_regions AS (
SELECT region
FROM regional_sales
WHERE total_sales > (SELECT SUM(total_sales)/10 FROM regional_sales)
)
SELECT region,
product,
SUM(quantity) AS product_units,
SUM(amount) AS product_sales
FROM orders
WHERE region IN (SELECT region FROM top_regions)
GROUP BY region, product;
Run Code Online (Sandbox Code Playgroud)
它还指出:
WITH 查询的一个有用特性是,它们在每次执行父查询时仅被评估一次,即使它们被父查询或同级 WITH 查询多次引用。
我看到它WITH可以用于其他事情,比如递归评估。但是在上面的例子中,使用WITH和创建临时表有什么重要的区别吗?
我们在ALTER TABLE几个小时前开始了一个查询,直到最近才意识到(通过pg_stat_activity)它正在等待锁定。我们发现另一个查询在我们想要更改的表上持有锁,并且不放手。
我们的查询是一个“简单”的查询(改变列数据类型),但它运行在一个庞大的表上。
我们决定与其杀死持有锁的进程,不如杀死ALTER TABLE.
我们没有将包装ALTER TABLE在交易中。
据我了解,我们的查询正在等待锁的事实意味着它一直在等待锁,并且从未改变任何东西。
这是真的?我们完全取消ALTER TABLE查询是否安全?或者查询是否可能已经修改了某些内容并取消它会使我们的数据库处于某种中间状态?
PS:计划是使用SELECT pg_cancel_backend(pid);. 如果这是一个坏主意,请告诉我。
可能以前有人问过这个问题,但我无法弄清楚。我有一张phone_clicks桌子(sql fiddle http://sqlfiddle.com/#!15/855e0/1)
CREATE TABLE phone_clicks (
id integer NOT NULL,
date date NOT NULL,
industry_id integer NOT NULL,
clicks integer DEFAULT 0 NOT NULL
);
insert into phone_clicks(id, date, industry_id, clicks)
values
(1, '2015-03-16', 1, 15),
(2, '2015-03-16', 2, 7),
(3, '2015-03-16', 3, 0),
(4, '2015-03-17', 1, 12),
(5, '2015-03-17', 3, 4),
(6, '2015-03-17', 4, 22),
(7, '2015-03-18', 1, 19),
(8, '2015-03-18', 2, 35);
Run Code Online (Sandbox Code Playgroud)
此表包含多个industry_ids 和日期的电话点击事件计数。
是否可以以多个日期范围为条件计算所有可用industry_ids的这些点击次数?我想要这个输出:
------------------------------------------------
industry_id | today | yesterday | last 3 …Run Code Online (Sandbox Code Playgroud) postgresql ×10
alter-table ×2
amazon-ec2 ×1
amazon-rds ×1
aws ×1
cte ×1
locking ×1
order-by ×1
recursive ×1
transaction ×1
view ×1
waits ×1