Japin

登高必自卑,行远必自迩

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

ARP (Address Resolution Protoco),中文地址解析协议,用来将网络层的 IP 地址转换为数据链路层的物理地址,该协议属于 TCP/IP 协议簇。当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据 48 bit 的以太网地址来确定目的接口的。设备驱动程序从不检查 IP 数据报中的目的 IP 地址。而地址解析为这两种不同的地址形式提供映射: 32 bit 的 IP 地址和数据链路层使用的任何类型的地址。RFC 826 给出了 ARP 协议的规范。ARP 协议为 IP 地址到对应的硬件物理地址提供了动态映射,通常情况下用户或系统管理员不用担心。

阅读全文 »

最近在客户那边了解到一个需求,想要监控 PostgreSQL 数据库每天的大小变化。其实这个功能挺简单的,PostgreSQL 可以通过函数 pg_database_size() 来获取数据库的大小,而客户需要做的就是每天去执行一下,并与上次的结果进行比较就可以得到了。当然,手动执行的效率不是很高,因此,我利用业余时间整理了一下,将这个需求通过 PostgreSQL 插件的形式提供出来。本文主要介绍一下如何实现这个功能。

阅读全文 »
0%