在 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,因此请谨慎使用超级用户!