标签 PostgreSQL 下的文章

PostgreSQL 超过 MySQL 成为开发者首选数据库

Stack Overflow 2023 年 5 月的调查显示,45.55% 的受访者使用 PostgreSQL,而 MySQL 为 41.09%,SQLite 为 30.9%。三年前,同样的调查中,MySQL 占 55.6%,PostgreSQL 占 36.1%。需要注意的是,这是一个开发者调查,它并不反映生产中的使用情况。此外,微软的 SQL Server 是排名最高的全商业数据库引擎,使用比例为 25.45%,比 2020 年的 33% 有所下降。

消息来源:Dev Class
老王点评:其实 PostgreSQL 在特性方面一直比 MySQL 好,但是这十多年来就一直被 MySQL 压着打。我接触的第一个开源数据库是 PostgreSQL 而不是 MySQL。现在似乎 MySQL 有点颓势了,而 PostgreSQL 多年的坚持得到了开发者们的认可。如果你是开发者,你会考虑选择哪个呢?

红帽准备开发 CentOS Stream 10

根据红帽工程师分享的 Fedora Enterprise Linux Next(ELN) 计划,推出 CentOS Stream 10 的进程正在进行中,这将最终形成 Red Hat Enterprise Linux(RHEL)10 的基础。预计将在 7 月把所有 Fedora ELN 内容大量导入 CentOS Stream 10。CentOS Stream 的目标是在明年 2 月的 Fedora 40 之前,不与 Fedora 分叉。预计 RHEL 10 将在 2025 年发布。

消息来源:Phoronix
老王点评:无论如何,我都觉得红帽放弃 CentOS 的战略是一大败笔,至少这件事可以做的更好。当然,任何决定背后都有其根本利益的驱动,红帽这样做无可厚非,只是如今这个局面可能是他们最初也没预料的吧。

英特尔简化其 CPU 品牌组合

英特尔已经宣布从下一代 Meteor Lake CPU 开始对其处理器品牌进行一些改变。最小的变化是,英特尔的主流 CPU 将失去其 “i”,从 Core i3/i5/i7/i9 转变为简单的 Core 3/5/7/9。英特尔还将停止在其处理器品牌中使用 “代” 的信息 —— 不会有被宣传为 “第 14 代” 的新 CPU,但会在 CPU 编号中包含世代编号。这是英特尔处理器品牌战略更广泛调整的一部分。去年,该公司放弃了低端笔记本电脑 CPU 的奔腾和赛扬品牌名称,它现在将这些英特尔处理器称为英特尔处理器。

消息来源:Ars Technica
老王点评:这些 CPU 厂商的命名真是有点随意,编号和实际的技术有时候有点脱节。

PgAdmin4 是一个自由开源的基于网络的 PostgreSQL 管理和开发平台。它可以与本地或远程的服务器上的 PostgreSQL 数据库服务器进行交互,并使用直观的交互式仪表板显示服务器的统计数据。

PgAdmin4 是对 PgAdmin3 的重写,提供了以下显著的功能:

  • 具有直观的实时监控仪表盘的响应式 Web UI。
  • 改进的 Web 界面,具有很酷的新面板和图标。
  • 带有语法高亮的 SQL 查询编辑器。
  • 全面的文档。
  • 帮助你入门的有用提示。

在本指南中,我们将演示如何在 RHEL 9 上安装 PgAdmin4。

先决条件

在开始之前,确保你有一台 RHEL 9 服务器实例并安装了 PostgreSQL 数据库。请查看如何在 RHEL 9 上 安装 PostgreSQL 15 的指南。

在安装了 PostgreSQL 服务器后,继续执行以下步骤。

步骤 1)在 RHEL 9 上添加 PgAdmin4 仓库

第一步是在 RHEL 9 上添加 PgAdmin4 仓库。但首先要安装 EPEL 仓库,它提供了基本的软件包。

$ sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm

接下来,安装 PgAdmin4 仓库,如下所示:

$ sudo dnf install -y https://ftp.postgresql.org/pub/pgadmin/pgadmin4/yum/pgadmin4-redhat-repo-2-1.noarch.rpm

完成后,为 PgAdmin4 和 EPEL 仓库建立一个缓存,如下所示:

$ sudo dnf makecache

步骤 2)在 RHEL 9 上安装 PgAdmin4

安装好 PgAdmin4 和 EPEL 仓库后,继续使用 DNF 包管理器安装 PgAdmin4,如下所示:

$ sudo dnf install pgadmin4 -y

这将安装许多软件包,包括 PgAdmin4、Apache HTTP web 服务器和 Python 软件包,仅举几例:

要确认 PgAdmin4 是否已经安装,请运行以下命令:

$ rpm -qi pgadmin4

这将打印出相当多的信息,包括已安装软件包的名称、版本、发行和架构。

步骤 3)在 RHEL 9 上启动/启用 PgAdmin4

此时,PgAdmin4 已成功安装。然而,你需要更进一步,让它运行起来。要启动 PgAdmin4 服务,请运行以下命令:

$ sudo systemctl start httpd

还要确保每次系统启动时都能启动该服务。

$ sudo systemctl enable httpd

要确认 PgAdmin4 正在运行,请执行以下命令:

$ sudo systemctl status httpd

步骤 4)在 RHEL 9 上初始化 PgAdmin4

PgAdmin4 软件包提供了一个可配置的脚本来设置 PgAdmin 网络服务。这允许你创建一个用户账户,用来验证和配置 SELinux 策略和 Apache Web 服务器。

因此,如下运行该脚本:

$ sudo /usr/pgadmin4/bin/setup-web.sh

提供你将在登录页面上作为登录凭证使用的电子邮件和密码。

注意:有时,你可能会遇到如下 “semanage: command not found” 的错误。这表明缺少 semanage 包。

Semanage 是 SELinux(安全增强型 Linux)策略管理工具的简称,是一个用于配置 SELinux 策略某些方面的工具,不需要对策略源进行修改或重新编译。

为了解决这个错误,你需要检查提供 semanage 的软件包。你可以通过运行以下命令来完成:

$ sudo dnf provides /usr/sbin/semanage

从输出中,你可以看到 semanage 是由 policycoreutils-python-utils-3.3-6.el9_0.noarch 包提供的。

要安装这个软件包,请运行以下命令:

$ sudo dnf install policycoreutils-python-utils -y

再一次如下运行 Pgadmin4 安装脚本。 提供电子邮件地址和密码,在提示时输入 y

$ sudo /usr/pgadmin4/bin/setup-web.sh

步骤 5)访问 PgAdmin4 的 Web 界面

此时,PgAdmin4 已经成功安装。要从网络浏览器访问它,请前往以下地址:

http://server-ip/pgadmin4

你会看到登录网页界面。请确保提供你在运行安装脚本时提供的 Email 和密码,并点击 “ 登录 Login ”:

登录后,PgAdmin4 的仪表板将出现在视图中,如图所示:

要添加一个可以由 PgAdmin4 管理的服务器,请点击 “ 添加新服务器 Add New Server ”:

在 “ 通用 General ” 选项卡中,填写服务器的名称,并添加注释,以便更好地描述:

接下来,点击 “ 连接 Connection ”,填写主机名/地址、端口、维护数据库、用户名和密码。然后最后点击 “ 保存 Save ”:

此后,你会看到 PosrgreSQL 服务器的统计数据显示在互动和直观的仪表板上。在左边的侧边栏,你可以浏览各种 PostgreSQL 参数:

总结

我们希望你觉得本指南内容丰富,请在下面的评论部分发表你的疑问和反馈。


via: https://www.linuxtechi.com/how-to-install-pgadmin-on-rhel/

作者:Pradeep Kumar 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Canonical 在 apt 命令中为其 Ubuntu Pro 打广告

之前我们 报道 过,Canonical 公司提供的 Ubuntu Pro 支持现在可供多达五台机器免费使用,为这些机器提供十年的支持服务。这本来是一件好事,但如果你从命令行用 apt 命令更新时,你就会看到 Canonical 发布的宣传这项免费服务的广告。这让一些用户非常恼火。Canonical 在自作主张向 Ubuntu 用户显示广告方面“劣迹斑斑”。上一次在服务器的登录屏幕中显示了促销信息,而在十年前,它还在桌面搜索结果中显示了亚马逊的广告。

消息来源:The Register
老王点评:我觉得,可能 Canonical 的初衷或许是好的,但是这种侵入式广告的方式太糟糕。或许,Ubuntu 应该在其桌面版和服务器版中专门提供一个通告服务,以使关注 Ubuntu 相关信息的人可以主动订阅。

黑客利用无人机,通过 Wi-Fi 远程渗透了金融公司内网

安保人员在美国东海岸一家专注于私人投资的金融公司的大楼顶层发现了两架 DJI 无人机,一架虽然炸机但仍在运行,而另一架实现了安全着陆。两架无人机上被加装了渗透套件,包含一台树莓派、GPD 迷你笔记本电脑、4G 调制解调器、Wi-Fi 设备、几块电池,以及一套网络渗透测试设备。攻击者利用该装置拦截了该公司员工的凭据,利用员工 MAC 地址和访问凭据、从屋顶侵入了该公司的内网。

消息来源:The Register
老王点评:这真是无孔不入,之前曾经有黑客靠近办公室渗透 Wi-Fi 的,现在居然连无人机都用上了。

PostgreSQL 15 发布

新版本进一步改进了性能,主要新特性包括:支持 SQL MERGE 命令;改进内存中和磁盘上的排序性能,最高提升 400%;启用了 Zstd 和 LZ4 压缩支持,并支持写前日志文件;支持 pg\_basebackup 期间执行服务器端压缩;等等。

消息来源:Phoronix
老王点评:我当时学习的第一个开源数据库就是 PG,可惜后来它的风头被 MySQL 抢走了,但是实际上 PG 更优秀。

PostgreSQL 是最灵活的数据库之一,并且它是开源的。

数据库是以一种有组织且灵活的方式存储信息的工具。电子表格在本质上就是一个数据库,但是图形化应用程序这一限制使得大多数的电子表格应用程序对程序员毫无用处。随着 边缘计算 和物联网设备成为重要的平台,开发者们需要更有效且轻量级的方法,来存储、处理、查询大量的数据。我最爱的一种组合是使用 Lua 连接 PostgreSQL 数据库。无论你使用什么编程语言,PostgreSQL 一定是数据库的绝佳选择,但是在使用 PostgreSQL 之前,首先你需要知道一些基本的东西。

安装 PostgreSQL

在 Linux 上安装 PostgreSQL,要使用你的软件库。在 Fedora,CentOS,Megeia 等类似的 Linux 版本上使用命令:

$ sudo dnf install postgresql postgresql-server

在 Debian, Linux Mint, Elementary 等类似的 Linux 版本上使用命令:

$ sudo apt install postgresql postgresql-contrib

在 macOs 和 Windows 上,可以从官网 postgresql.org 下载安装包。

配置 PostgreSQL

大多数发行版安装 PostgreSQL 数据库时没有启动它,但是为你提供了一个脚本或 systemd 服务,能够可靠地启动 PostgreSQL。但是,在启动 PostgreSQL 之前,必须创建一个数据库集群。

Fedora

在 Fedora,CentOS 等类似的版本上,PostgreSQL 安装包中提供了一个 PostgreSQL 配置脚本。运行这个脚本,可以进行简单地配置:

$ sudo /usr/bin/postgresql-setup --initdb
[sudo] password:
 * Initializing database in '/var/lib/pgsql/data'
 * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log

Debian

在基于 Debian 的发行版上,在安装 Postgres 的过程中,配置会通过 apt 自动完成。

其他版本

最后,如果你是在其他版本上运行的,那么你可以直接使用 PostgreSQL 提供的一些工具。initdb 命令会创建一个数据库集群,但是这个命令必须在 postgres 用户下运行,你可以使用 sudo 来暂时地成为 postgres 用户:

$ sudo -u postgres \
    "initdb -D /var/lib/pgsql/data \
    --locale en_US.UTF-8 --auth md5 --pwprompt"

运行 PostgreSQL

现在,数据库集群已经存在了,使用 initdb 的输出中提供给你的命令或者使用 systemd 启动 PostgreSQL 服务器:

$ sudo systemctl start postgresql

创建一个数据库用户

使用 createuser 命令来创建一个数据库用户。postgres 用户是 Postgres 安装的超级用户。

$ sudo -u postgres createuser --interactive --password bogus
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) n
Password:

创建一个数据库

使用 createdb 命令来创建一个新的数据库。在这个例子中,我创建了数据库 exampledb,并把该数据库的拥有者分配给用户 bogus

$ createdb exampledb --owner bogus

与 PostgreSQL 交互

你可以使用 psql 命令来与 PostgreSQL 中的数据库进行交互。这个命令提供了一个交互界面,所以你可以用它来查看和更新你的数据库。你需要指定要使用的用户和数据库,来连接到一个数据库。

$ psql --user bogus exampledb
psql (XX.Y)
Type "help" for help.

exampledb=>

创建一个表

数据库包含很多表。这些表可以可视化为表格,有很多行(在数据库中称为 记录)和很多列。行和列的交集称为 字段

结构化查询语言(SQL)是以它提供的内容而命名的,它能提供可预测且一致的语法,来查询数据库内容,从而收到有用的结果。

目前,你的数据库是空的,没有任何的表。你可以用 CREATE 语句来创建一个表。结合使用 IF NOT EXISTS 是很有用的,它可以避免破坏现有的表。

在你创建一个表之前,想想看你希望这个表包含哪一种数据(在 SQL 术语中称为“数据类型”)。在这个例子中,我创建了一个表,包含两列,有唯一标识符的一列和最多九个字符的可变长的一列。

exampledb=> CREATE TABLE IF NOT EXISTS my_sample_table(
exampledb(> id SERIAL,
exampledb(> wordlist VARCHAR(9) NOT NULL
);

关键字 SERIAL 并不是一个数据类型。SERIALPostgreSQL 中的一个特殊的标记,它可以创建一个自动递增的整数字段。关键字 VARCHAR 是一个数据类型,表示限制内字符数的可变字符。在此例中,我指定了最多 9 个字符。PostgreSQL 中有很多数据类型,因此请参阅项目文档以获取选项列表。

插入数据

你可以使用 INSERT 语句来给你的新表插入一些样本数据:

exampledb=> INSERT INTO my_sample_table (wordlist) VALUES ('Alice');
INSERT 0 1

如果你尝试在 wordlist 域中输入超过 9 个字符,则数据输入将会失败:

exampledb=> INSERT INTO my_sample_table (WORDLIST) VALUES ('Alexandria');
ERROR:  VALUE too long FOR TYPE CHARACTER VARYING(9)

改变表或者列

当你需要改变一个域的定义时,你可以使用 ALTER 这一 SQL 关键字。例如,如果你想改变 wordlist 域中最多只能有 9 个字符的限制,你可以重新设置这个数据类型。

exampledb=> ALTER TABLE my_sample_table
ALTER COLUMN wordlist SET DATA TYPE VARCHAR(10);
ALTER TABLE
exampledb=> INSERT INTO my_sample_table (WORDLIST) VALUES ('Alexandria');
INSERT 0 1

查询表中的内容

SQL 是一种查询语言,因此你可以通过查询来查看数据库的内容。查询可以是很简单的,也可以涉及连接多个不同表之间的复杂关系。要查看表中的所有内容,请使用 SELECT 关键字和 ** 是通配符):

exampledb=> SELECT * FROM my_sample_table;
 id |  wordlist
----+------------
  1 | Alice
  2 | Bob
  3 | Alexandria
(3 ROWS)

更多数据

PostgreSQL 可以处理很多数据,但是对于任何数据库来说,关键之处在于你是如何设计你的数据库的,以及数据存储下来之后你是怎么查询数据的。在 OECD.org 上可以找到一个相对较大的公共数据集,你可以使用它来尝试一些先进的数据库技术。

首先,将数据下载为逗号分隔值格式(CSV)的文件,并将文件另存为 Downloads 文件夹中的 land-cover.csv

在文本编辑器或电子表格应用程序中浏览数据,来了解有哪些列,以及每列包含哪些类型的数据。仔细查看数据,并留意错误情况。例如,COU 列指的是国家代码,例如 AUS 表示澳大利亚和 GRC 表示希腊,在奇怪的 BRIICS 之前,这一列的值通常是 3 个字符。

在你理解了这些数据项后,你就可以准备一个 PostgreSQL 数据库了。

$ createdb landcoverdb --owner bogus
$ psql --user bogus landcoverdb
landcoverdb=> create table land_cover(
country_code varchar(6),
country_name varchar(76),
small_subnational_region_code varchar(5),
small_subnational_region_name varchar(14),
large_subnational_region_code varchar(17),
large_subnational_region_name varchar(44),
measure_code varchar(13),
measure_name varchar(29),
land_cover_class_code varchar(17),
land_cover_class_name varchar(19),
year_code integer,
year_value integer,
unit_code varchar(3),
unit_name varchar(17),
power_code integer,
power_name varchar(9),
reference_period_code varchar(1),
reference_period_name varchar(1),
value float(8),
flag_codes varchar(1),
flag_names varchar(1));

引入数据

Postgres 可以使用特殊的元命令 \copy 来直接引入 CSV 数据:

landcoverdb=> \copy land_cover from '~/land-cover.csv' with csv header delimiter ','
COPY 22113

插入了 22113 条记录。这是一个很好的开始!

查询数据

SELECT 语句可以查询这 22113 条记录的所有列,此外 PostgreSQL 将输出通过管道传输到屏幕上,因此你可以轻松地滚动鼠标来查看输出的结果。更进一步,你可以使用高级 SQL 语句,来获得一些有用的视图。

landcoverdb=> SELECT
    lcm.country_name,
    lcm.year_value,
    SUM(lcm.value) sum_value
FROM land_cover lcm
JOIN (
    SELECT
        country_name,
        large_subnational_region_name,
        small_subnational_region_name,
        MAX(year_value) max_year_value
    FROM land_cover
    GROUP BY country_name,
        large_subnational_region_name,
        small_subnational_region_name
) AS lcmyv
ON
    lcm.country_name = lcmyv.country_name AND
    lcm.large_subnational_region_name = lcmyv.large_subnational_region_name AND
    lcm.small_subnational_region_name = lcmyv.small_subnational_region_name AND
    lcm.year_value = lcmyv.max_year_value
GROUP BY lcm.country_name,
    lcm.large_subnational_region_name,
    lcm.small_subnational_region_name,
    lcm.year_value
ORDER BY country_name,
    year_value;

下面是样例的一些输出:

---------------+------------+------------
 Afghanistan    |       2019 |  743.48425
 Albania        |       2019 |  128.82532
 Algeria        |       2019 |  2417.3281
 American Samoa |       2019 |   100.2007
 Andorra        |       2019 |  100.45613
 Angola         |       2019 |  1354.2192
 Anguilla       |       2019 | 100.078514
 Antarctica     |       2019 |  12561.907
[...]

SQL 是一种很丰富的语言,超出了本文的讨论范围。通读 SQL 的内容,看看你是否可以对上面的查询语句进行修改,以提供不同的数据集。

拓展数据库

PostgreSQL 是伟大的开源数据库之一。有了它,你可以为结构化数据设计存储库,然后使用 SQL 以不同的方式查询它,以便能够获得有关该数据的新视角。PostgreSQL 也能与许多语言集成,包括 Python、Lua、Groovy、Java 等,因此无论你使用什么工具集,你都可以充分利用好这个出色的数据库。


via: https://opensource.com/article/22/9/drop-your-database-for-postgresql

作者:Seth Kenlon 选题:lkxed 译者:chai001125 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

超人、蝙蝠侠、蜘蛛侠频频出现在密码中

Mozilla 对密码泄露数据库的数据进行研究发现,数十万人使用他们最喜欢的超级英雄作为密码。在这些密码泄露事件中,“超人(Superman)”出现了 36 万次,“蝙蝠侠(Batman)”出现了 22 万次,“蜘蛛侠(Spider-Man)”出现 了 16 万次。金刚狼和铁人也出现了几千次。甚至连这些角色的扮演者的名字也经常被用于密码,尤以金刚狼的扮演者詹姆斯·豪利特受欢迎。

老王点评:在密码方面,超级英雄也不能给你力量,还是微软现在的无密码策略比较好。

REvil 被发现其勒索软件含有秘密后门

REvil 是近年来最臭名昭著的勒索软件攻击团伙之一,该组织还提供了“勒索软件即服务”,以通过租赁的方式从下游恶意攻击者那里抽成。安全研究人员在对地下论坛进行分析后发现,REvil 勒索软件还植入了秘密后门,能让上线的黑客接管与受害者的协商,不给下线提成。在俄语的地下论坛,有人表示早就怀疑 REvil 的策略,他们与一名受害者讨论 700 万美元赎金时,协商突然结束了,他们认为是 REvil 使用后门接管了赎金谈判。地下论坛上的另一位也抱怨称,他们已经厌倦了这个“不被信任”的勒索软件团伙提供的“糟糕的合伙应用程序”。

老王点评:怎么说呢,这就是黑吃黑啊。

PostgreSQL 14 正式发布

广泛使用的 PostgreSQL 发布了 14.0,带来了许多性能改进,特别是围绕并行查询、重度并发工作负载、分区表、逻辑复制和吸尘等方面进行了新的优化。

老王点评:这是我用过的第一个开源数据库,虽然一度其风头被 MySQL 盖住,但是现在越来越呈现出一种繁荣景象,值得关注学习。

无论你需要的东西简单(如一个购物清单)亦或复杂(如色卡生成器) ,PostgreSQL 命令都能使它变得容易起来。

PostgreSQL 入门一文中, 我解释了如何安装、设置和开始使用这个开源数据库软件。不过,使用 PostgreSQL 中的命令可以做更多事情。

例如,我使用 Postgres 来跟踪我的杂货店购物清单。我的大多数杂货店购物是在家里进行的,而且每周进行一次大批量的采购。我去几个不同的地方购买清单上的东西,因为每家商店都提供特定的选品或质量,亦或更好的价格。最初,我制作了一个 HTML 表单页面来管理我的购物清单,但这样无法保存我的输入内容。因此,在想到要购买的物品时我必须马上列出全部清单,然后到采购时我常常会忘记一些我需要或想要的东西。

相反,使用 PostgreSQL,当我想到需要的物品时,我可以随时输入,并在购物前打印出来。你也可以这样做。

创建一个简单的购物清单

首先,输入 psql 命令进入数据库,然后用下面的命令创建一个表:

Create table groc (item varchar(20), comment varchar(10));

输入如下命令在清单中加入商品:

insert into groc values ('milk', 'K');
insert into groc values ('bananas', 'KW');

括号中有两个信息(逗号隔开):前面是你需要买的东西,后面字母代表你要购买的地点以及哪些东西是你每周通常都要买的(W)。

因为 psql 有历史记录,你可以按向上键在括号内编辑信息,而无需输入商品的整行信息。

在输入一小部分商品后,输入下面命令来检查前面的输入内容。

Select * from groc order by comment;

      item      | comment
----------------+---------
 ground coffee  | H
 butter         | K
 chips          | K
 steak          | K
 milk           | K
 bananas        | KW
 raisin bran    | KW
 raclette       | L
 goat cheese    | L
 onion          | P
 oranges        | P
 potatoes       | P
 spinach        | PW
 broccoli       | PW
 asparagus      | PW
 cucumber       | PW
 sugarsnap peas | PW
 salmon         | S
(18 rows)

此命令按 comment 列对结果进行排序,以便按购买地点对商品进行分组,从而使你的购物更加方便。

使用 W 来指明你每周要买的东西,当你要清除表单为下周的列表做准备时,你可以将每周的商品保留在购物清单上。输入:

delete from groc where comment not like '%W';

注意,在 PostgreSQL 中 % 表示通配符(而非星号)。所以,要保存输入内容,需要输入:

delete from groc where item like 'goat%';

不能使用 item = 'goat%',这样没用。

在购物时,用以下命令输出清单并打印或发送到你的手机:

\o groclist.txt
select * from groc order by comment;
\o

最后一个命令 \o 后面没有任何内容,将重置输出到命令行。否则,所有的输出会继续输出到你创建的杂货店购物文件 groclist.txt 中。

分析复杂的表

这个逐项列表对于数据量小的表来说没有问题,但是对于数据量大的表呢?几年前,我帮 FreieFarbe.de 的团队从 HLC 调色板中创建一个自由色的色样册。事实上,任何能想象到的打印色都可按色调、亮度、浓度(饱和度)来规定。最终结果是 HLC Color Atlas,下面是我们如何实现的。

该团队向我发送了具有颜色规范的文件,因此我可以编写可与 Scribus 配合使用的 Python 脚本,以轻松生成色样册。一个例子像这样开始:

HLC, C, M, Y, K
H010_L15_C010, 0.5, 49.1, 0.1, 84.5
H010_L15_C020, 0.0, 79.7, 15.1, 78.9
H010_L25_C010, 6.1, 38.3, 0.0, 72.5
H010_L25_C020, 0.0, 61.8, 10.6, 67.9
H010_L25_C030, 0.0, 79.5, 18.5, 62.7
H010_L25_C040, 0.4, 94.2, 17.3, 56.5
H010_L25_C050, 0.0, 100.0, 15.1, 50.6
H010_L35_C010, 6.1, 32.1, 0.0, 61.8
H010_L35_C020, 0.0, 51.7, 8.4, 57.5
H010_L35_C030, 0.0, 68.5, 17.1, 52.5
H010_L35_C040, 0.0, 81.2, 22.0, 46.2
H010_L35_C050, 0.0, 91.9, 20.4, 39.3
H010_L35_C060, 0.1, 100.0, 17.3, 31.5
H010_L45_C010, 4.3, 27.4, 0.1, 51.3

这与原始数据相比,稍有修改,原始数据用制表符分隔。我将其转换成 CSV 格式(用逗号分割值),我更喜欢其与 Python 一起使用(CSV 文也很有用,因为它可轻松导入到电子表格程序中)。

在每一行中,第一项是颜色名称,其后是其 C、M、Y 和 K 颜色值。 该文件包含 1,793 种颜色,我想要一种分析信息的方法,以了解这些值的范围。这就是 PostgreSQL 发挥作用的地方。我不想手动输入所有数据 —— 我认为输入过程中我不可能不出错,而且令人头痛。幸运的是,PostgreSQL 为此提供了一个命令。

首先用以下命令创建数据库:

Create table hlc_cmyk (color varchar(40), c decimal, m decimal, y decimal, k decimal);

然后通过以下命令引入数据:

\copy  hlc_cmyk from '/home/gregp/HLC_Atlas_CMYK_SampleData.csv' with (header, format CSV);

开头有反斜杠,是因为使用纯 copy 命令的权限仅限于 root 用户和 Postgres 的超级用户。在括号中,header 表示第一行包含标题,应忽略,CSV 表示文件格式为 CSV。请注意,在此方法中,颜色名称不需要用括号括起来。

如果操作成功,会看到 COPY NNNN,其中 N 表示插入到表中的行数。

最后,可以用下列命令查询:

select * from hlc_cmyk;

     color     |   c   |   m   |   y   |  k  
---------------+-------+-------+-------+------
 H010_L15_C010 |   0.5 |  49.1 |   0.1 | 84.5
 H010_L15_C020 |   0.0 |  79.7 |  15.1 | 78.9
 H010_L25_C010 |   6.1 |  38.3 |   0.0 | 72.5
 H010_L25_C020 |   0.0 |  61.8 |  10.6 | 67.9
 H010_L25_C030 |   0.0 |  79.5 |  18.5 | 62.7
 H010_L25_C040 |   0.4 |  94.2 |  17.3 | 56.5
 H010_L25_C050 |   0.0 | 100.0 |  15.1 | 50.6
 H010_L35_C010 |   6.1 |  32.1 |   0.0 | 61.8
 H010_L35_C020 |   0.0 |  51.7 |   8.4 | 57.5
 H010_L35_C030 |   0.0 |  68.5 |  17.1 | 52.5

所有的 1,793 行数据都是这样的。回想起来,我不能说此查询对于 HLC 和 Scribus 任务是绝对必要的,但是它减轻了我对该项目的一些担忧。

为了生成 HLC 色谱,我使用 Scribus 为色板页面中的 13,000 多种颜色自动创建了颜色图表。

我可以使用 copy 命令输出数据:

\copy hlc_cmyk to '/home/gregp/hlc_cmyk_backup.csv' with (header, format CSV);

我还可以使用 where 子句根据某些值来限制输出。

例如,以下命令将仅发送以 H10 开头的色调值。

\copy hlc_cmyk to '/home/gregp/hlc_cmyk_backup.csv' with (header, format CSV) where color like 'H10%';

备份或传输数据库或表

我在此要提到的最后一个命令是 pg_dump,它用于备份 PostgreSQL 数据库,并在 psql 控制台之外运行。 例如:

pg_dump gregp -t hlc_cmyk > hlc.out
pg_dump gregp > dball.out

第一行是导出 hlc_cmyk 表及其结构。第二行将转储 gregp 数据库中的所有表。这对于备份或传输数据库或表非常有用。

要将数据库或表传输到另一台电脑(查看 PostgreSQL 入门那篇文章获取详细信息),首先在要转入的电脑上创建一个数据库,然后执行相反的操作。

psql -d gregp -f dball.out

一步创建所有表并输入数据。

总结

在本文中,我们了解了如何使用 WHERE 参数限制操作,以及如何使用 PostgreSQL 通配符 。我们还了解了如何将大批量数据加载到表中,然后将部分或全部表数据输出到文件,甚至是将整个数据库及其所有单个表输出。


via: https://opensource.com/article/20/2/postgresql-commands

作者:Greg Pittman 选题:lujun9972 译者:Morisun029 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出