PostgreSQL 是最灵活的数据库之一,并且它是开源的。
数据库是以一种有组织且灵活的方式存储信息的工具。电子表格在本质上就是一个数据库,但是图形化应用程序这一限制使得大多数的电子表格应用程序对程序员毫无用处。随着 边缘计算和物联网设备成为重要的平台,开发者们需要更有效且轻量级的方法,来存储、处理、查询大量的数据。我最爱的一种组合是使用Lua 连接 
ostgreSQL 数据库。无论你使用什么编程语言,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 数据库时没有启动它,但是为你提供了一个脚本或 systemd 服务,能够可靠地启动 PostgreSQL。但是,在启动 PostgreSQL 之前,必须创建一个数据库集群。
在 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 的发行版上,在安装 Postgres 的过程中,配置会通过 apt
自动完成。
最后,如果你是在其他版本上运行的,那么你可以直接使用 PostgreSQL 提供的一些工具。initdb
命令会创建一个数据库集群,但是这个命令必须在postgres
用户下运行,你可以使用sudo
来暂时地成为postgres
用户:
$ sudo -u postgres \ "initdb -D /var/lib/pgsql/data \ --locale en_US.UTF-8 --auth md5 --pwprompt"
现在,数据库集群已经存在了,使用 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
你可以使用 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
并不是一个数据类型。SERIAL
是PostgreSQL 中的一个特殊的标记,它可以创建一个自动递增的整数字段。关键字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 等,因此无论你使用什么工具集,你都可以充分利用好这个出色的数据库。
传统行业一般通过地图、独立、小程序和4种方法进行拓展客户。传统行业拓展渠道很难,即使有一小部分拓展成功的传统,也是一路跌跌撞撞被骗了无数次,兜兜转转绕了无数圈,才能拨开重重迷雾,真正建立起来网络获客渠道。一路上弯路很多,忽悠的人也很多,因为个人也是这样一路走过来的。过时的推广方法前几天忽然有人加好友...
手机和电脑都有(。-ω-)zzz 马卡龙玩图 马卡龙玩图是一个AI 修图App,只要你有足够大的脑洞,就可以玩出花样。 它可以一键区分人物,动物和背景各种元素,想要替代人物或者背景,分分钟就完成。 而且它还有各种滤镜,轻松把自己的照片变成油画一般,满满的都是中世纪的复古...
正文:现在大家都在谈创业,可是创业也是需要很多资金投入的,从当前形式来看,普通创业者根本就不合适大规模投资,因为现在是信息社会,不是刚改革开放那会,只要有胆量,随便做点生意都能赚大 正文:现在大家都在谈创业,可是创业也是需要很多资金投入的,从当前形式来看,普通创业者根本就不合适大规模投资,因为现在...
做自媒体一天收入相当于我一年工资了,走,做自媒体去。也是从这两次事件开始,自媒体火了。可是,两年过去了,99%的自媒体人还在苦苦探索盈利模式。做自媒体,收这样高级别的广告费,除了文 做自媒体一天收入相当于我一年工资了,走,做自媒体去。也是从这两次事件开始,自媒体火了。可是,两年过去了,99%的自媒...
有人说扬州属于经济强的苏南,更多人说属于经济弱的苏北。如果以长江而论,当然属于苏北。但争来争去终于给扬州,甚至泰州、南通等地。找到一个当地人感觉有面子而苏北苏南地域人们又都认可的说 有人说扬州属于经济强的苏南,更多人说属于经济弱的苏北。如果以长江而论,当然属于苏北。但争来争去终于给扬州,甚至泰州、...
上次,我发过一篇《有哪些适合女生做的副业?》适合男生的当然也有!今天和大家分享比较适合男生做的兼职。体力&脑力变现,安排!01.兼职跑腿可以看做是跑腿、外卖兼职,也就是别人付费,帮 上次,我发过一篇《有哪些适合女生做的副业?》 适合男生的当然也有! 今天和大家分享比较适合男生做的兼职。...
(本文由公众号越声策略(yslc188)整理,仅供参考,不构成操作建议。如自行操作,注意仓位控制和风险自负。)今天给大家分享的指标是关于OBV的指标,这里特命名为“极品OBV”,该指标是由OBV演变而来,还是非常具有借鉴 (本文由公众号越声策略(yslc188)整理,仅供参考,不构成操作建议。如自...
堂弟在美国生活了将近20年了,是平时很少回来,前一阵子突然回到国内还有些不适应,习惯了花美元的他冷不丁的用上了人民币,我就向他打听了一下人民币和美元的差别。体现在购买力上的话,通常美国那边称重是按照每磅来算的,我们拿猪肉 堂弟在美国生活了将近20年了,是平时很少回来,前一阵子突然回到国内还有些不适...
远古海底最恐怖的生物 今天给大家盘点一下古代九大史前巨兽,它们凶猛、巨大、可怕。将近三米的大蜈蚣简直就是现代蜈蚣的祖先。 九大远古时代的史前巨兽? 还有一些大的残忍的野兽,看起来像现代的蝎子。为什么残忍?因为这种野兽因为吃了自己的肉而灭绝了!接下来是精彩时刻。请逐一阅读。 第九...
冬至烧纸钱是很多地区都有的习俗之一,但由于这是祭祀祖先,所以烧纸的时辰也成了大家茶余饭后讨论的焦点,下面小编就和大家一起看看2022冬至烧纸钱可以提前烧吗宜什么时间点烧。2022冬至烧纸钱可以提前烧吗看地方的讲究,毕竟十 冬至烧纸钱是很多地区都有的习俗之一,但由于这是祭祀祖先,所以烧纸的时辰也成了...
客厅里的红木家具能不能随便摆是很多人好奇的,毕竟客厅作为家中比较重要的场景之一试,大家对该事的每个节点都尤为的关注,下面小编就和大家一起看看红木家具怎么摆放在客厅最好。客厅里的红木家具能不能随便摆不能。现在的社会,大家的 客厅里的红木家具能不能随便摆是很多人好奇的,毕竟客厅作为家中比较重要的场景之...
嘴唇老是长疱疹一般是属于单纯疱疹,这种是没有办法彻底治愈的,只能使用药物涂抹治疗,当换季时,身体免疫力下降就会出现,所以大家平时需要补充维生素C,增强体质,以防嘴唇疱疹的出现。女性为什么会得口唇疱疹女性口唇疱疹是由单纯疱 嘴唇老是长疱疹一般是属于单纯疱疹,这种是没有办法彻底治愈的,只能使用药物涂抹...
压岁钱是2023年除夕给还是大年初一给是大家常聊的,对于小孩子来讲一年中最为喜爱的节日除了寒暑假就是春节了,毕竟过年长辈给的压岁钱可以说是一笔不小的收入了,下面小编就和大家一同看看什么是压岁钱。压岁钱是2023年除夕给还 压岁钱是2023年除夕给还是大年初一给是大家常聊的,对于小孩子来讲一年中最为...
深圳南山好玩的地方 1 欢乐海岸 景区简介: 快乐海岸总面积约125万平方米,其中水域面积近一半。总的来说,快乐海岸最大的特点就是以水为魂。 深圳市十大著名旅游景点? 景区亮点: 快乐海岸汇聚全球大师智慧,以海洋文化为主题,以生态环境保护为理念,以创新商业为主体,以创造城市滨海健...
衬衣品牌排行榜男士 男士商务衬衫有什么牌子? 在正式的商务场合,你必须穿商务衬衫,以传达你的信心。你不知道男士商务衬衫吗?你可以看看小编的文章:男士商务衬衫的品牌是什么?男士商务衬衫十大品牌! 十大品牌的男士商务衬衫 1、七匹狼 2、诺伯乐 3、G2000 4...