我计划在某个时候将我们的主要项目转移到Postgres 10.我喜欢保持本地开发人员的数据库版本接近我们在prod上运行的版本.
目前,我们的prod数据库位于Google Cloud SQL PostgreSQL 9.6上.除了9.6之外,我还没有听到谷歌关于此托管云sql产品何时提供Postgres 10.x的任何信息.
有谁知道Postgres 10何时成为GCP托管SQL产品的支持选项?我想开始计划.
postgresql google-cloud-sql google-cloud-platform postgresql-10
来自关于完全真空的 PostgreSQL 10.4 手册:
请注意,它们还会临时使用大约等于表大小的额外磁盘空间,因为在新表和索引完成之前无法释放表和索引的旧副本
我在很多不同的地方读过这篇文章,并以各种方式表达过。一些表明所需的空间最多等于真空表的大小。暗示它可能只需要足够的空间来存储生成的真空表,即大小在 [0-size_of_original_table] 范围内,具体取决于表中有多少死行。
我的问题是:对表进行完全真空是否总是需要等于原始表大小的空间,还是取决于表中的活动行数?
pg_dump版本10.3开始明确地将模式名称添加到表名.那是过去的
INSERT INTO table (id) VALUES (1);
Run Code Online (Sandbox Code Playgroud)
就是现在
INSERT INTO public.table (id) VALUES (1);
Run Code Online (Sandbox Code Playgroud)
你怎么能把它关掉?我的问题是,我将其转储到没有模式名称的mariadb中.
我有一个 postgresql 9.3 实例,我想升级到 postgresql 10。我有一个我认为应该有效的命令,但它包含校验和。我的旧实例没有启用校验和(甚至可以吗?忘记太久以前了),这导致我的试运行无法正常工作。
错误信息
Performing Consistency Checks on Old Live Server
------------------------------------------------
Checking cluster versions ok
old cluster does not use data checksums but the new one does
Failure, exiting
Run Code Online (Sandbox Code Playgroud)
我的命令剥夺了真实路径
time ${PGBINNEW}/pg_upgrade --old-bindir=${PGBINOLD} --new-bindir=${PGBINNEW} --old-datadir=${PGDATAOLD} --new-datadir=${PGDATANEW} --old-port=${PGPORT} --new-port=${PGPORT} --jobs=$(nproc | awk '{ {print ($1 > 4) ? 4 : ($1 == 1 ? 1 : $1 - 1)} }') --link --username=postgres --check
Run Code Online (Sandbox Code Playgroud)
我可以做什么来解决这个问题?
我有 PostgreSQL 10.5 数据库和 Rails 5 应用程序。
我的型号:
# == Schema Information
#
# Table name: property_keys
#
# id :integer not null, primary key
# name :string
# created_at :datetime not null
# updated_at :datetime not null
# i18n_name :jsonb
#
class PropertyKey < ApplicationRecord
# Fields
store :i18n_name, accessors: I18n.available_locales, coder: JSON
end
Run Code Online (Sandbox Code Playgroud)
我的迁移:
class LocalizeProperties < ActiveRecord::Migration[5.2]
def up
add_column :property_keys, :i18n_name, :jsonb
PropertyKey.all.each do |property_key|
[:en, :de, :ru].each do |locale_key|
property_key.i18n_name[locale_key] = property_key.name
end
property_key.save!
end …Run Code Online (Sandbox Code Playgroud) 假设我有一张桌子,桌子上有id一个INTEGER GENERATED BY DEFAULT AS IDENTITY
我打算记录如何更改类型,如果将来integer太小而需要将id类型从更改integer为bigint。我主要担心更改的时间复杂性,因为当表中的行数接近整数类型可以存储的最大数目时,很可能会发生更改。
以下命令的时间复杂度是多少?
ALTER TABLE project ALTER COLUMN id TYPE BIGINT;
Run Code Online (Sandbox Code Playgroud) 我在生产中继承了一个 PostgreSQL 数据库,其中有一张大小约为 250 GB 的表。它只有大约一万行,我估计不超过 20 MB。
AUTOVACUUM由于某个时间已关闭,该表变得如此大。(我知道为什么这样做。它将被重新激活,原始问题已得到解决,所以这不是问题的一部分。)
我们的问题是许多查询需要很长时间。例如,aSELECT count(*) FROM foo;大约需要 15 分钟。
现在,在考虑了其他选项之后,我想VACUUM FULL在桌面上运行一个。我尝试估计完成此操作所需的持续时间,以便我可以计划维护时段。
根据我的理解,VACUUM FULL创建一个新表,将所有活动元组复制到其中,并用此副本替换原始表。
我的估计是,这个过程不会比像上面这个表上的简单查询花费更长的时间,因为实时数据的总体大小和数量都非常小。
您是否同意我对“VACUUM FULL”的运行时间的期望在某种程度上是现实的?如果没有,为什么不呢?
是否有估计VACUUM FULL持续时间的最佳实践?
我们有一个旧的 Flyway 数据库更新
UPDATE plays SET album = (regexp_matches(album, '^6,(?:(.+),)?tv\d+'))[1]
Run Code Online (Sandbox Code Playgroud)
...在 9.2 到 9.6 的任何 Postgres 版本上运行良好,但在最新的 Postgres 10 上运行失败。即使在没有任何 JDBC 的情况下直接运行时也会发生。
ERROR: set-returning functions are not allowed in UPDATE
Run Code Online (Sandbox Code Playgroud)
是否存在我在 10 版发行说明中没有注意到的向后不兼容性?有解决方法吗?
使用 DBeaver 调试 Postgres SQL 时是否可以打印到控制台窗口或输出窗口?
如果是这样...怎么办?谢谢!
postgresql debugging stored-procedures dbeaver postgresql-10
假设我有一个类似的查询
select * from remote_table
join local_table using(common_key)
Run Code Online (Sandbox Code Playgroud)
其中 remote_table 是一个FOREIGN TABLEwithpostgres_fdw并且local_table是一个普通表。
local_table小(100 行)和remote_table大(数百万行)。
看起来远程表被整体拉取并在本地加入,此时将较小的表发送到远程服务器并远程加入会更有效。
有没有办法让 postgres_fdw 做到这一点?
postgresql ×10
postgresql-10 ×10
vacuum ×2
dbeaver ×1
debugging ×1
json ×1
jsonb ×1
pg-dump ×1
pg-restore ×1
postgres-fdw ×1
sql ×1
upgrade ×1