在 PostgreSQL 中输出 “Hello World!!”

这是2015年PostgreSQL Advent Calendar第2天的文章。

本次我想通过PostgreSQL,编写、编译和执行Hello World的C程序。
这是一种适用于只打开了PostgreSQL连接端口的服务器上的技巧!

请始终以超级用户身份执行以下SQL操作。

-- Hello Worldのソースを保存するテーブルを作成します。
CREATE TABLE hello_source (line serial, code text);

-- Hello WorldのCプログラムの実行結果を保存するテーブルを作成します。
CREATE TABLE hello_result (output text);

-- COPY FROM stdinで、Hello Worldのソースをhello_sourceテーブルに保存します。
COPY hello_source (code) FROM stdin;
#include <stdio.h>

int main(void)
{
    printf("Hello World !!\n");
    return 0;
}
\.

-- COPY TO PROGRAMで、Hello Worldのソースを/tmp/hello.cに保存し、gccでコンパイルします。
COPY (SELECT code FROM hello_source ORDER BY line) TO
  PROGRAM 'tee /tmp/hello.c; gcc -o /tmp/hello /tmp/hello.c';

-- Cプログラムを実行し、その結果をhello_resultテーブルに蓄積します。
COPY hello_result FROM PROGRAM '/tmp/hello';

-- 実行結果を確認してみましょう!!
SELECT * FROM hello_result;

请留意

正如此示例所示,超级用户是一个非常危险的用户,他不仅可以执行所有PostgreSQL上的操作,还可以执行任意的操作系统命令。例如,要拒绝远程超级用户登录,可以配置pg_hba.conf,因此请谨慎使用超级用户!

广告
将在 10 秒后关闭
bannerAds