PostgreSQLスキルアップノート(自己啓発のための個人サイト)

ecpgのごく簡単な例


【一覧に戻る】


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■■■■ PostgreSQL スキルアップノート
■■■■
■◆■■ ecpgのごく簡単な例
■■■■
■■■■
■■■■ 2012/09
■■■■ 使用環境:PostgreSQL9.1.4 (CentOS6.2)
                                                                   (C) 2012 ohdb
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
★自己都合によりマニュアルへのリンクは9.2としています。ご了承下さい。
★このページはそのままカット&ペーストで実行して試すことができます。


【マニュアル】

ecpgコマンド →●[マニュアル]

接続関連→●[マニュアル]


【参考記事】
 −



■1■ ソース例
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

ソースの拡張子(推奨)は 「.pgc」


【□】 以下を test.pgc として作成

#include 

EXEC SQL BEGIN DECLARE SECTION;
    char    dbname[1024];
    char    tmpstr[1024];
EXEC SQL END DECLARE SECTION;

int
main()
{
    EXEC SQL CONNECT TO postgres USER postgres;

    EXEC SQL SELECT current_database() INTO :dbname;
    printf("current_database=%s \n", dbname);
    
    EXEC SQL select cast(current_timestamp as varchar) INTO :tmpstr;
    printf("current_timestamp=%s \n", tmpstr);

    EXEC SQL DISCONNECT;
    return 0;
}




■2■ コンパイル
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


【□】 ecpg test1.pgc

【□】 cc -I/usr/local/pgsql/include -c test1.c

【□】 cc -o test1 test1.o -L/usr/local/pgsql/lib -lecpg


【□】 ls -l test1*

[postgres@kvm00 ecpg]$ ls -l test1*
-rwxrwxr-x 1 postgres postgres 9051  9月  8 23:37 2012 test1
-rw-rw-r-- 1 postgres postgres 1216  9月  8 23:37 2012 test1.c
-rw-rw-r-- 1 postgres postgres 2568  9月  8 23:37 2012 test1.o
-rw-rw-r-- 1 postgres postgres  461  9月  8 23:37 2012 test1.pgc

 
【参考】 

-I/usr/local/pgsql/include
 コンパイルする際、PostgreSQLのインクルードディレクトリ内にあるECPGヘッダファイルを検索できるようにする。
 
-L/usr/local/pgsql/lib -lecpg  リンカオプション
 libecpgライブラリをリンクする。 


上記の各ディレクトリは環境により異なるのでpg_configコマンドで確認





【参考】NULLの使用関連(詳細確認必要)

-r option
実行時の動作を選択します。以下のいずれかをoptionとして取ることができます。 

no_indicator
指示子を使用せずにNULL値を表す特殊な値を使用します。歴史的にこの方式を使用したデータベースが存在します。 

こちらも参照

http://www.postgresql.jp/document/9.1/html/ecpg-variables.html



■3■ 実行
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


【□】 ./test1


current_database=postgres
current_timestamp=2012-09-08 23:42:29.308352+09



                                                                                                                               
以上 
inserted by FC2 system