标签: postgresql

将远程 Postgres 表导出到本地机器上的 CSV 文件

我对远程服务器上的数据库具有只读访问权限。所以,我可以执行:

COPY products TO '/tmp/products.csv' DELIMITER ',';
Run Code Online (Sandbox Code Playgroud)

但是在该服务器上我没有创建/保存文件的权限,所以我需要在我的本地机器上执行此操作。

当我连接到远程数据库时,如何执行命令将文件保存在本地计算机而不是远程服务器上?

或者,如何执行 Linux 命令以连接到远程数据库、执行查询并将输出作为文件保存到我的本地计算机?

postgresql export copy csv

20
推荐指数
1
解决办法
5万
查看次数

MySQL 和 PostgreSQL 对于相同模式/查询的性能差异

我是 DBA 新手,我有使用 Microsoft SQL Server 的经验,但我想跳到 FLOSS。

我正在创办一家公司,我们开发了一个带有 Postgres 后端的应用程序 (PHP),我们也做了一些与 MySQL 进行比较的测试。我们观察到 MySQL 的速度是 PostgreSQL 的两倍。

我做了一个有形的性能测试:

  • 表中具有等效列数据类型的相同列。
  • 行数相同。
  • 两者中的相同索引(包括主键)。
  • CPU 负载处于空闲状态,而 Postgres 机器则要好得多。
  • 和相同的查询(显然)。

我究竟做错了什么?

PS:我阅读了许多关于数据库引擎性能调优的“howtos”。
PS(2):我们在 MySQL 数据库上使用 InnoDB(每个表一个文件)。


嗨垫!

我做了三个常见的选择(和最难的)查询。

关于磁盘的问题,当然不一样;在 Postgres 中,它是一个 SSD(快了几乎三倍)。

MySQL缓存数据:

+------------------------------+----------------------+
| Variable_name                | Value                |
+------------------------------+----------------------+
| binlog_cache_size            | 32768                |
| have_query_cache             | YES                  |
| key_cache_age_threshold      | 300                  |
| key_cache_block_size         | 1024                 |
| key_cache_division_limit     | 100                  |
| max_binlog_cache_size        | 18446744073709547520 |
| query_cache_limit            | …
Run Code Online (Sandbox Code Playgroud)

mysql postgresql testing

20
推荐指数
1
解决办法
5万
查看次数

从 Amazon RDS 获取 postgres 快照

我找不到一种简单的方法来获取我从 Amazon RDS postgres 实例中获取的每晚备份的副本,以便我可以在本地计算机上恢复它以供使用。

现在,当我需要副本时,我正在执行 pg_dump,但是能够下载这些快照会更好(并且可能更快)。这不可能吗?

postgresql backup amazon-rds

20
推荐指数
1
解决办法
9063
查看次数

log_min_duration_statement 设置被忽略

Postgresql 9.1在 Ubuntu 上运行。确切的 Postgresql 版本是9.1+129ubuntu1如我的包管理器所示。

我有 2 个正在使用的数据库,它们是从远程服务器使用的。

我希望记录执行时间较长的查询。所以我在/etc/postgresql/9.1/main/postgresql.conf文件中设置了以下参数

log_min_duration_statement = 10000
log_statement = 'mod'
Run Code Online (Sandbox Code Playgroud)

所以 Postgresql 会记录耗时超过 10 秒的查询。

但是当我reload配置 postgres 时,Postgresql 开始记录每个符合log_statement值的查询。我将持续时间设置为 100 秒以确保

log_min_duration_statement = 100000
Run Code Online (Sandbox Code Playgroud)

但是 Postgresql 会继续记录每个符合log_statement值的查询,而不管值是多少log_min_duration_statement

设置log_statementnone似乎停止记录。

有什么我错过的配置吗?

postgresql performance logs postgresql-9.1 postgresql-performance

20
推荐指数
1
解决办法
2万
查看次数

计算一行中两列或更多列超过某个值的位置 [篮球、双双、三双]

我玩了一场篮球比赛,它允许将其统计数据输出为数据库文件,因此可以从中计算出游戏中未实现的统计数据。到目前为止,我在计算我想要的统计数据时没有遇到任何问题,但现在我遇到了一个问题:从他的比赛统计数据中计算一个球员在整个赛季中取得的双打和/或三双的数量。

双双和三双的定义如下:

双双:

两双是指球员在一场比赛中在五个统计类别中的两个类别(得分、篮板、助攻、抢断和盖帽)中累积达到两位数的总和的表现。

三双:

三双被定义为球员在一场比赛中在五个统计类别中的三个——得分、篮板、助攻、抢断和盖帽——中累计达到两位数的表现。

四双(添加澄清)

四双被定义为球员在一场比赛中在五个统计类别中的四个类别(得分、篮板、助攻、抢断和盖帽)中累计达到两位数的表现。

“PlayerGameStats”表存储玩家玩的每个游戏的统计数据,如下所示:

CREATE TABLE PlayerGameStats AS SELECT * FROM ( VALUES
  ( 1, 1,  1, 'Nuggets',    'Cavaliers',  6,  8,  2, 2,  0 ),
  ( 2, 1,  2, 'Nuggets',     'Clippers', 15,  7,  0, 1,  3 ),
  ( 3, 1,  6, 'Nuggets', 'Trailblazers', 11, 11,  1, 2,  1 ),
  ( 4, 1, 10, 'Nuggets',    'Mavericks',  8, 10,  2, 2, 12 ),
  ( 5, 1, 11, 'Nuggets',       'Knicks', 23, 12,  1, 0,  0 ),
  ( …
Run Code Online (Sandbox Code Playgroud)

mysql postgresql count group-by

20
推荐指数
4
解决办法
4642
查看次数

比较两个相似的 Postgres 数据库的差异

我偶尔会以 Postgres dB 的形式下载公开可用的数据集。这些数据集由存储库主机随时间更新/修改/扩展。

是否有 Postgres 命令或工具(最好是 FOSS)可以显示旧 Postgres 数据库和新 Postgres 数据库之间的差异?(一个可行的假设是 95% 的条目没有改变,表和关系也没有改变)。

postgresql data-warehouse

20
推荐指数
2
解决办法
6万
查看次数

如何按 XYZ 等典型软件版本进行订购?

给定一个“SoftwareReleases”表:

| id | version |
|  1 | 0.9     |
|  2 | 1.0     |
|  3 | 0.9.1   |
|  4 | 1.1     |
|  5 | 0.9.9   |
|  6 | 0.9.10  |
Run Code Online (Sandbox Code Playgroud)

我如何产生这个输出?

| id | version |
|  1 | 0.9     |
|  3 | 0.9.1   |
|  5 | 0.9.9   |
|  6 | 0.9.10  |
|  2 | 1.0     |
|  4 | 1.1     |
Run Code Online (Sandbox Code Playgroud)

postgresql order-by sorting natural-sort

20
推荐指数
3
解决办法
1万
查看次数

PostgreSQL:表的创建日期

我最近完成了一个项目,在此期间创建了许多数据库表。

这些表中的大多数都包含临时垃圾,我正在寻找一种简单的方法来列出所有这些表。

有没有办法列出根据创建日期排序的所有数据库表?

schema postgresql

19
推荐指数
3
解决办法
4万
查看次数

在 WHERE 子句中使用列别名不起作用

给定一个users包含两个字段的表:idemail

select id, email as electronic_mail 
from (  
        select id, email 
        from users
) t 
where electronic_mail = ''
Run Code Online (Sandbox Code Playgroud)

Postgres 抱怨说:

ERROR:  column "electronic_mail" does not exist
Run Code Online (Sandbox Code Playgroud)

这个例子只是为了说明出现的问题。我的实际情况更复杂,我遍历 json 列中的元素数组,从每个元素中获取一个标量值。(如果有帮助,我可以分享一些代码。)

我真的不明白会有什么并发症,可能我不知道什么。我的印象是可以在WHERE子句中使用别名列而没有问题?

postgresql subquery alias where

19
推荐指数
2
解决办法
2万
查看次数

除了添加大量列之外,是否有用于存储许多布尔标志的通用模式?

我有一堆需要与用户帐户关联的布尔值。它们需要在真假之间切换,尽管不是特别频繁——它们被阅读的次数将比写入的次数更多。大多数情况下,它们只会从 False 设置为 True 一次,但情况并非总是如此。

现在我正在考虑将列附加到用户表中:

用户身份 other_user_cols did_a did_b did_c
1 ... 错误的 真的 错误的
2 ... 错误的 错误的 错误的
3 ... 真的 错误的 错误的

问题是,有很多这样的布尔列。

假设您需要添加 100 列。这真的仍然是最好的方法吗?

认为:

  • 它不会非常稀疏 - 大多数用户会在某个时候切换大多数布尔值
  • 布尔值没有以自然可以更好地组织的方式在逻辑上相关
  • 可能需要不时添加新的
  • 标志直接与每个用户相关联,除了单个布尔值之外不需要其他信息

我觉得这一定是一个非常常见的模式,但是这种将更多布尔列塞入我的表的方式似乎相当混乱。有没有更典型的方法来做它更干净一点?或者这实际上是最好的方法?

为此,我正在使用 Postgres。

以下是我考虑过的一些替代方案:

  • 序列化为字符串的 json 列表(= 列名)。这听起来比原来的更混乱,如果我想对数据进行任何严肃的 SQL 操作,也不理想
  • 使用数字和按位运算 - 不确定这有多受支持,以及需要对单个标志进行操作/查找的类似问题
  • 有一个单独的表,如:
用户身份 标志名称 价值
1 did_a 错误的
1 did_b 错误的
3 did_a 真的

作为替代方案,这对我来说似乎是最合理的,但不确定是否真的值得麻烦,或者是否有更好的方法。

postgresql database-design

19
推荐指数
3
解决办法
2401
查看次数