Postgresql 文档在这一点上很清楚:您不能更改现有视图的列。
新查询必须生成与现有视图查询生成的列相同的列(即,列名相同,顺序和数据类型相同)(...)
参考:http : //www.postgresql.org/docs/9.3/static/sql-createview.html
为什么我必须删除视图或更改它来修改它?
我们有 2 个专用的数据库服务器。一个是主,另一个是它的流从。
Postgres 版本9.0.17。
我们在两台服务器上都有类似的硬件,并在 Raid 10 中使用 15krpm SAS 驱动器用于数据库集群。唯一的区别是在服务器上我们有 128 GB 内存,而在从服务器上我们有 64 GB 内存。
我们面临的问题是我们的流媒体奴隶落后了。
在流式从属设备上,我们有
postgres=# select pg_last_xlog_receive_location();
pg_last_xlog_receive_location
-------------------------------
1F7D/DD3BA000
postgres=# select pg_last_xlog_replay_location();
pg_last_xlog_replay_location
------------------------------
1F75/5BE08980
Run Code Online (Sandbox Code Playgroud)
wal received 和 replay 之间的这种差异在不断增加。
请让我知道如何解决此问题。
的输出perf top -u postgres是
98.30% postgres (.) DropRelFileNodeBuffers
0.20% postgres (.) 0x000000000008b05b
0.14% (kernel) (k) copy_user_generic_string
0.13% postgres (.) hash_seq_search
0.07% postgres (.) hash_search_with_hash_value
0.05% (kernel) (k) _spin_lock
0.05% (kernel) (k) apic_timer_interrupt
0.03% (kernel) (k) do_timer
0.03% postgres …Run Code Online (Sandbox Code Playgroud) 我创建了一个视图和一个 INSTEAD OF 触发器,用于从该视图中插入/更新/删除。现在我尝试向视图中插入一些数据,PostgreSQL 返回以下错误(捷克语翻译:“chyba”=“error”,“Stav SQL”=“SQL state”):
ERROR: cannot insert into view "ukaz_lok"
DETAIL: Views that return columns that are not columns of their base relation are not automatically updatable.
HINT: To enable inserting into the view, provide an INSTEAD OF INSERT trigger or an unconditional ON INSERT DO INSTEAD rule.
********** Chyba **********
ERROR: cannot insert into view "ukaz_lok"
Stav SQL: 55000
Run Code Online (Sandbox Code Playgroud)
这发生在其他一些 INSTEAD OF 触发器之前 - 这个错误只持续了一段时间(几个小时?我不记得了)然后 PostgreSQL 找到了触发器。我尝试了各种事情(更改触发器,删除所有触发器和视图并重新创建它们等),但我不确定什么有效,只是有些东西有效。那么究竟如何让 PostgreSQL 识别触发器呢?
我在 Windows XP 32 位上有 PostgreSQL …
按照PostgreSQL 9.3.4 文档中关于pg_upgrade的升级过程从 postgres 9.2 升级到 9.3 时,以下命令失败:
RUNAS /USER:postgres "CMD.EXE"
Run Code Online (Sandbox Code Playgroud)
经过一番调查,机器上似乎没有 postgres windows 用户。这pg_upgrade也会导致命令失败。
我应该如何运行升级过程?
我在这里的更广泛的问题与何时适合使用 HStore、多个表和一个表来存储类似文档的对象有关。
现在,对于我的本地化示例:我正在设计一个用于保存实验结果的数据库结构。我的第一个想法是为每个实验设置单独的表格。这看起来像:

然而,这将需要大量JOIN跨表的s,因为最终用户想要跨多个实验查找数据是相当普遍的。(旁注:也许是继承的一个很好的用例?)。我想我可以通过像这样的整体实验表来避免这种情况:

这肯定会消除对JOINs的需要,但我觉得以某种方式将各个实验分开是合乎逻辑的。此外,要求完整进行一项实验也是很常见的。这就是为什么我正在考虑使用HStore这样的:

这对我很有吸引力,因为每个单独的结果集都非常类似于文档,但我担心我会遇到多表方法带来的相同问题。
其他可能相关的考虑和想法:
我还应该提到,我对 PostgreSQL 的经验非常有限,但我已经对它提供的超越 MySQL 的功能感到高兴!
我们知道 WAL 文件位于$PGDATA/pg_xlog目录中,但我不知道 WAL 文件的含义,例如名为“0000000A00005283000000E0”的 WAL 文件,
我看到一些博客说 WAL 文件名尊重格式名称,该格式名称细分为 3 个由 8 个十六进制数字组成的序列,定义:
时间线 ID
区块ID
段 ID
但我仍然不明白这一点。任何人都可以解释这一点?
- 询问
francs=> select pg_current_xlog_location();
pg_current_xlog_location
--------------------------
5283/D9C2A320
(1 row)
francs=> select pg_xlogfile_name(pg_current_xlog_insert_location());
pg_xlogfile_name
--------------------------
0000000A00005283000000E0
Run Code Online (Sandbox Code Playgroud) 在使用 Postgres 同步复制的设置中,假设其中一台辅助/备用机器崩溃,这会锁定/停止主机器吗?也就是说,由于 Postgres master 在提交写入事务之前总是等待来自辅助/备用的确认,那么如果辅助/备用无法访问,那么主会停止运行吗?Postgres 如何处理这种情况?
我正在尝试RANGE在窗口函数中使用 postgres子句将窗口动态设置为过去 4 周,不包括当前日期。这是我的尝试:
SELECT date("aa0"."created_at") AS "Day of Created At",
"aa0"."user_id" AS "User Id",
count (*) activities_today,
count(*) over (PARTITION BY "aa0"."user_id"
ORDER BY date("aa0"."created_at") ASC
RANGE BETWEEN date("aa0"."created_at" - interval '4 weeks')
AND
date("aa0"."created_at" - interval '1 day')
) active_days_past_4_weeks
FROM "public"."activity_activity" AS "aa0"
GROUP BY date("aa0"."created_at"), "aa0"."user_id"
ORDER BY "Day of Created At" ASC LIMIT 1000;
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
ERROR: syntax error at or near ")" Position: 459
Run Code Online (Sandbox Code Playgroud)
如果我使用ROWS而不是RANGE它有效,但这不是正确的逻辑,因为不能保证每天都会有一行:
SELECT date("aa0"."created_at") AS "Day …Run Code Online (Sandbox Code Playgroud) 是否有设置控制 PostgreSQLANALYZE命令扫描的记录/页面数量?看起来默认情况下它会扫描 30,000 页和 30,000 条记录。在PostgreSQL服务器配置文件清单吨的选项,但我没有看到任何具体到ANALYZE。
postgresql ×10
replication ×2
view ×2
columnstore ×1
hstore ×1
plpgsql ×1
trigger ×1
upgrade ×1
windows ×1