Japin

登高必自卑,行远必自迩

我们知道在 Oracle 数据库中,大对象有三种类型,分别是 CLOB,BLOB 和 BFILE。在 Oracle 数据库中大对象最大存储根据配置可以达到 8TB 到 128TB。然而在 PostgreSQL 数据库中并没有提供这三种数据类型。因此在进行迁移的时候,我们需要做类型的映射。在参考文献 [2] 中提到可以将 CLOB 和 BLOB 分别映射到 text 和 bytea 数据类型上。此外,PostgreSQL 的插件 pg_largeobject 也提供了一种大对象的支持。本文简要介绍这两种大对象的使用。

阅读全文 »

我有一台旧笔记本装有 Ubuntu 18.04 系统,希望把它当作一个服务器,这时我就需要在盖住笔记本时系统不休眠。

Ubuntu 系统中提供了 Login Manager 来管理这些行为,它的配置文件为 /etc/systemd/logind.conf。通过
man logind.conf 我们可以看到其详细说明。

其中有一项 HandleLidSwitch,它控制了笔记本盖住的行为,默认情况下是 suspend,我们可以将其修改为 ignore 即可以实现我们的目的。例如,我们修改 /etc/system/logind.conf 文件中的

1
#HandleLidSwitch=suspend

行修改为

1
HandleLidSwitch=ignore

然后重启 systemd-logind 服务即可。

1
$ sudo service systemd-logind restart

WIFI 配置

当我们使用这种方式合住机盖时,WIFI 连接有时可能不是很稳定,这是因为 WIFI 默认启用了省点模式,可以通过下面的方式关闭 WIFI 的省点模式:

1
2
$ sed -i 's/wifi.powersave = 3/wifi.powersave = 2/' /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf
$ sudo systemctl restart network-manager.service

本质上就是将 /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf 中的 wifi.powersave3 修改为 2

  • NM_SETTING_WIRELESS_POWERSAVE_DEFAULT (0): use the default value
  • NM_SETTING_WIRELESS_POWERSAVE_IGNORE (1): don’t touch existing setting
  • NM_SETTING_WIRELESS_POWERSAVE_DISABLE (2): disable powersave
  • NM_SETTING_WIRELESS_POWERSAVE_ENABLE (3): enable powersave

当 SSH 连接到主机时,如果出现 WIFI 连接无法外网时,可以使用 nmcli 命令来连接网络。首先,使用下面的命令查看 WIFI 信息:

1
2
3
$ nmcli d wifi
IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY
* D4:4D:9F:FD:44:86 ChinaNet-abPe Infra 11 130 Mbit/s 89 ▂▄▆█ WPA2 WPA3

接着使用 nmcli d wifi connect ChinaNet-abPe password your-password 来连接 WIFI 网络。

参考

[1] https://gist.github.com/jcberthon/ea8cfe278998968ba7c5a95344bc8b55

PostgreSQL 的 HASH 索引在 9.6 和 10 版本中有所不同,主要的区别在于 HASH 索引在 9.6 及其之前的版本中不会记录在 WAL 日志中,然而在 10 及其之后的版本这个已经被修复了。

例如,下面是在 PostgreSQL 9.6.17 中创建 HASH 索引。

1
2
3
postgres=# CREATE INDEX id_hash_index ON hash_table USING hash(id);
WARNING: hash indexes are not WAL-logged and their use is discouraged
CREATE INDEX

从警告中可以看到,PostgreSQL 已经给出了明确提示。然而在 PostgreSQL 12.2 中,创建 HASH 索引则没有上述提示:

1
2
postgres=# create index idx_hash_id on hash_table using hash(id);
CREATE INDEX
阅读全文 »

PostgreSQL 12 的流复制与之前的版本有所不同,主要有以下几点区别:

  1. PG12 将原有的属于 recovery.conf 配置文件中配置项迁移到了 postgresql.conf 文件中,在新系统中如果存在 recovery.conf 文件,数据库将无法启动;
  2. 文件 recovery.signalstandby.signal 用于切换数据库为非主(non-primary)模式;
  3. trigger_file 被修改为 promote_trigger_file并且只能在 postgresql.conf 可在配置文件或服务器命令行进行配置;
  4. 最后,standby_mode 参数被移除了。

详细说明请移步官网。本文将在 Ubuntu 18.04 LTS 下搭建 PG12 的流复制系统。

阅读全文 »

在工作中经常使用 GDB 来调试程序,但是一直都没有系统的进行学习过,为此,我打算对其进行一个系统的学习,学习的主要材料来自 GNU GDB 文档 Debugging with GDB

本文主要包括如何运行以及退出 GDB,通常,我们使用 gdb 即可进入 GDB,而 quit 命令或者 Ctrl-d 快捷键便可以退出 GDB。

阅读全文 »

在之前的几篇关于 C 语言的文章中,我们以及掌握了 C 语言的基本要素,本文主要介绍 C 语言的程序结构和范围。

阅读全文 »

Git 中可以通过 git checkout -- <file>... 来撤销当前工作空间的修改。例如,我们有以下文件已经做出了修改:

1
2
3
4
5
6
7
8
9
10
11
12
$ git status
On branch hunghudb-11.3beta
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

modified: src/backend/postmaster/pgstat.c
modified: src/backend/replication/logical/reorderbuffer.c
modified: src/backend/storage/file/buffile.c
modified: src/include/pgstat.h
modified: src/include/replication/reorderbuffer.h
modified: src/include/storage/buffile.h

如果此时我想要撤销这些修改,我们应该怎么做呢?

阅读全文 »

最近在向 PostgreSQL 社区提交 patch 时,发现其维护者很快就定位到了代码何时由谁更改了,作为一个萌新,我也不好意思问:(,只能自己下来查找资料,经过一番搜索,发现了 git blame 这个命令。

阅读全文 »

聚簇索引是按照数据存放的物理位置为顺序的,每个表仅有一个聚簇索引。

MySQL 数据库中的 InnoDB 引擎中的主键即为聚簇索引,当我们在表上定义主键时,InnoDB 会将其用作聚簇索引,如果表上没有定义主键,那么 InnoDB 将会使用第一个全不为空的唯一性索引作为聚簇索引,如果表上即没有主键、也没有唯一性索引,那么 InnoDB 将会自动生成一个隐藏的 GEN_CLUST_INDEX 索引作为聚簇索引。

PostgreSQL 在创建表时并不能指定聚簇索引,但是我们可以通过 CLUSTER 来创建聚簇索引,本文主要介绍 PostgreSQL 数据库中的聚簇索引。

阅读全文 »

本文主要介绍如何实现一个系统函数,类似于 pg_backend_pid() 的系统函数。PostgreSQL 所有的系统函数都记录在 pg_proc 系统表中。

1
2
3
4
5
postgres=# select oid,proname from pg_proc where proname = 'pg_backend_pid';
oid | proname
------+----------------
2026 | pg_backend_pid
(1 row)
阅读全文 »
0%