Japin

登高必自卑,行远必自迩

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)
阅读全文 »

C 语言提供了子程序,它可以将我们的程序分割成不同的部分。为了编写函数,我们至少给出函数的定义。通常,我们还需要给出函数的声明;但是,函数的声明不是必须的,如果不给出函数声明,那么编译器将给出一个匹配该函数的隐式声明,而且我们将得到编译时警告。

每个程序都至少需要一个名为 main 的函数,这是程序执行的入口函数。本文主要分为以下几部分:

  • 函数声明
  • 函数定义
  • 函数调用
  • 函数参数
  • 变长参数列表
  • 函数指针调用
  • main 函数
  • 递归函数
  • 静态函数
  • 嵌套函数
阅读全文 »

今天在 Solaris 上遇到一个问题,我需要在非超级用户下运行某个服务。默认情况下,通过 SMF 管理的都是在 root 用户下运行的,但是我们可以通过修改配置文件来使其运行到特定用户下。

阅读全文 »

C 语言提供了语句用以控制程序的执行流程。您可以编写不执行任何操作的语句,当然也可以编写执行毫不相关的语句(没有任何意义)。本文主要介绍 C 语言所提供的一些语句类型,它们分别是:

  1. 空语句 - 即形如 ; 这样的语句;
  2. 块语句 - 用括号括起来的一组零个或多个语句;
  3. 条件语句 - if
  4. 返回语句 - return
  5. 循环语句 - dowhilefor
  6. 开关语句 - switch,与 case 结合使用;
  7. 标签语句 - labels:,通常与 goto 结合使用;
  8. 跳转语句 - gotobreakcontinue,后两者用于循环语句中;
  9. 表达式语句 - 例如 a += 10
  10. 类型定义语句 - typedef
阅读全文 »
0%