Astor Data、Greenplum 和 GridSQL 都允许对 SQL 查询进行大规模并行处理。它们也都是围绕 PostgreSQL 技术构建的。这仅仅是因为许可问题还是有其他原因?对我来说,它看起来像 MyISAM,不符合 ACID,因此不会遇到与 MVCC 相同的问题(如这里所见),因为 PostgreSQL 更适合构建高性能数据仓库。毕竟,就我所见,OLAP 负载不需要事务。
如何在 PostgreSQL 类型中以降低的精度存储日期和时间值,并使它们表现为日期和/或时间值?
ISO 8601 允许精度降低的日期值。'1964', '1964-05', '1964-05-02' 都是值的有效表示,精度越来越高。Python 'datetime' 类型也允许以这种方式降低精度的值。
在原生日期类型中,日期的每个元素都必须存在,否则该值将被拒绝。将低于所需精度级别的元素设置为“00”也会失败。
=> SELECT CAST('1964-05-02' AS DATE);
date
------------
1964-05-02
(1 row)
=> SELECT CAST('1964-05' AS DATE);
ERROR: invalid input syntax for type date: "1964-05"
LINE 1: SELECT CAST('1964-05' AS DATE);
^
=> SELECT CAST('1964' AS DATE);
ERROR: invalid input syntax for type date: "1964"
LINE 1: SELECT CAST('1964' AS DATE);
^
=> SELECT CAST('1964-00-00' AS DATE);
ERROR: date/time field value out of range: …Run Code Online (Sandbox Code Playgroud) 我无法理解 PostgreSQL 中模式的概念和用法。我不知道它如何影响我的数据库设计。我为什么要使用它?
如果我决定现在不考虑它们,以后再担心它们,这会影响我将来吗?
用一个例子解释会很好。
我一直在努力让我们的数据库客户端主动避免填满他们正在使用的数据库所在的分区。
由于我们所有的客户端都与数据库管理器在同一台主机上,因此对于用户创建的表空间来说应该很容易;客户端可以查找表空间的文件系统路径(在 spclocation 中),并使用操作系统调用来检查有多少可用空间:
adb=> select * from pg_tablespace;
spcname | spcowner | spclocation | spcacl
------------+----------+-------------------+---------------------
pg_default | 10 | |
pg_global | 10 | |
adb | 2033793 | /database/adb | {adb=C/adb}
Run Code Online (Sandbox Code Playgroud)
我无法从客户端看到如何获取全局表空间存储位置的路径;在上面的查询中为它返回一个空字符串。
不幸的是,我们在该领域有许多遗留系统使用在全局表空间中创建的特定数据库,将它移到用户创建的表空间中将是一项巨大的努力。
希望我只是错过了一些非常简单的东西。
这是场景:
有两台机器运行 CentOS 6.2 - machine0 和 machine1
两者都安装了 PostgreSQL 9.1。
其中一个应该是活动的,作为主系统,并通过异步流复制另一台机器,备用系统应该将更改从主系统复制到数据库。
假设开始时machine0是master,machine1是standby。
如果 master(比如 machine0)失败(这里的失败意味着 postgresql 服务器崩溃),standby 应该从 master 接管并成为新的 master。
machine1,新的 master 处理所有数据库操作,当 machine0 中的 postgresql 服务器重新联机时,它应该成为备用服务器,从与 machine1 失去联系的点开始同步,并将所有更改复制到数据库并保持备用模式。
当机器 1 失败时,整个循环重复。
当备用服务器出现故障并重新上线时,它应该开始从主服务器读取数据并同步数据。
我很困惑我需要使用什么工具来设置它,因为我知道 PostgreSQL 默认不带有故障转移。
如果有人可以将我链接到描述如何做我正在尝试的主题/页面,我将非常感激。
我们有一个带有相当大表(约 5000 万行)的 PostgreSQL 数据库。该表具有跨多个列的唯一约束,每一列都有索引。对于上下文,我最近删除了表中大约一半的行——旧数据。现在我想简单地删除多列唯一约束,所以我执行了这个 SQL:
alter table my_big_table drop constraint my_constraint_name
Run Code Online (Sandbox Code Playgroud)
但是,我在 10 多个小时前启动了该命令,它仍在运行,没有减弱的迹象。为什么删除约束需要这么长时间?有什么我遗漏的,或者有什么方法可以通过某种进度或状态指示来执行这样的操作?
(我在 Windows 64 位系统上使用 PostgreSQL 9.0,我通常使用 pgAdmin 连接到它,但我也可以使用命令行客户端或以编程方式连接。)
我的应用程序需要一个可靠的 SQL DB,并且一直在研究 Postgresql 的流复制支持。设置主/从复制似乎并不难,您可以使用从作为只读查询的热备用。到目前为止一切都很好。但是,当主站失败(或从站认为主站失败)时,我如何自动将一个从站提升为主站?我知道我可以在从服务器上编写一个文件以使其成为主服务器,但我正在寻找脚本等来做到这一点(并确保主服务器保持关闭等)。
任何人都知道如何在 Ubuntu 12.04 上执行此操作的不错教程?在 Hetzner 举办(获得奖励积分)?厨师食谱什么的?
假设我有这张表:
Table "public.orders"
Column | Type | Collation | Nullable | Default
-----------------+---------------+-----------+----------+---------
o_orderkey | integer | | not null |
o_custkey | integer | | |
o_orderstatus | character(1) | | |
o_totalprice | numeric(12,2) | | |
o_orderdate | date | | |
o_orderpriority | character(15) | | |
o_clerk | character(15) | | |
o_shippriority | integer | | |
o_comment | character(79) | | |
Run Code Online (Sandbox Code Playgroud)
如果我有涉及o_orderstatus、o_orderpriority或列的查询,我可以将数据类型更改为 以改进它们吗o_clerk?o_commentchar(n)text
我找到了这个问题的答案,表明重新启动 postgres 可能需要一段时间。但现在我们已经等了2个多小时,与通常需要的5分钟相比,这显得非常漫长。(/sf/ask/3844570341/,/sf/ask/3844570341/
-数据库系统正在启动-windows-10
)
除了 之外没有其他日志FATAL: the database system is starting up。此外,CPU 和 RAM 利用率极低。看起来好像什么也没发生。
我们还检查了磁盘空间,没有问题。
我们应该等多久才能尝试其他事情?您知道什么可能导致此问题以及如何解决它吗?
一些附加信息:
max_wal_size = 8GB
min_wal_size = 512MB
checkpoint_completion_target = 0.9
Run Code Online (Sandbox Code Playgroud)
使用该-d 3标志启动 postgres 后,我们得到以下日志:
2022-12-02 15:17:10.471 UTC [1] LOG: starting PostgreSQL 13.8 (Ubuntu 13.8-1.pgdg22.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.2.0-19ubuntu1) 11.2.0, 64-bit
2022-12-02 15:17:10.472 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
2022-12-02 15:17:10.472 …Run Code Online (Sandbox Code Playgroud) 我在 Ubuntu 22.04 上安装了 PostgreSQL 和 PostGIS。
我可以从 QGIS 访问 PostGIS-Layers 并使用它们。
当我使用以下命令检查 PostgreSQL 的状态时:sudo systemctl status postgresql它返回:Active: active (exited)。
我的 apache 有以下状态:Active: active (running)。我预计 PostgreSQL 也会有同样的状态。
那么这是什么exited意思?
日志文件说:
postgres@postgres FATAL: password authentication failed for user "postgres"
postgres@postgres DETAIL: User "postgres" has no password assigned.
Run Code Online (Sandbox Code Playgroud)
但我使用其他数据库名和用户名,而不是 postgres。那我可以忽略这个吗?
postgresql ×10
replication ×2
datatypes ×1
disk-space ×1
failover ×1
linux ×1
mysql ×1
optimization ×1
parallelism ×1
rdbms ×1
schema ×1
sql-standard ×1
timestamp ×1
ubuntu ×1