libpqxxでpostgresqlへ接続

早速libpqxxでPostgreSQLに接続してみたいと思います。

libpqxx勉強開始です。

今日のお話

libpqxxライブラリでPostgresqlへ接続してみたという記録です。

開発言語

C++

環境

ソースコード

void Db::DbConnect()
{
    try
        {
            conn = new pqxx::connection{"hostaddr=xxx.xxx.xxx.xxx port=xxxx dbname=xxxx user=xxxx password=xxxx"};

            pqxx::work worker(*conn);
            pqxx::result result = worker.exec("Select * from xxxx");

            for (pqxx::row row : result)
            {
                cout << row[1].c_str() << endl;
            }
        }
        catch (const exception &e)
        {
            cerr << e.what() << endl;
        }
    }
}

xxxx のところは接続環境情報となります。

気付き

  • 意外と簡単にDb接続、データの取得まですることができた。
  • connection関数の中は、半角スペースで区切るみたいです。
  • libpqxxの型になるのでその辺りは確認しながら作成する感じですね。

戯言

  • 接続できるようにはなったけど、まだまだ改善の余地がアリそう。
  • 次はinsert, update, delete, selectの関数を作っていきたいかな。

Makefileを使ってみたい

Makefile

今日のお話

環境

注意事項

  • 説明に重点を置いているので、順に説明していきます。急いでいる人は下から読んでいくことがオススメです!
  • 間違っていることがあればコメントください!

フォルダ構成

- Project(ディレクトリ)
        |-main.cpp
        |-Hoge.hpp(インタフェースクラス)
        |-HogeSub.hpp
        |-HogeSub.cpp

Makefileの中身の名称

ターゲット:依存ファイル
    コマンド

Makefileを使わない場合

↓みたいな感じでコマンドを順次実行する必要がある

$ g++ -c HogeSub.cpp -o HogeSub.o
$ g++ -c main.cpp -o main.o
$ g++ main.o HogeSub.o

とりあえずMakefile作る

All:
    g++ -c HogeSub.cpp -o HogeSub.o
    g++ -c main.cpp -o main.o
    g++ main.o HogeSub.o

初期進化

変数、依存ファイルを知ると↓みたいになった。

CC = g++
CFLAGS = -g -Wall

All: main.o HogeSub.o
    $(CC) $(CFLAGS) -o main main.o HogeSub.o

mani.o: main.cpp
    $(CC) $(CFLAGS) -o mani.o -c main.cpp

HogeSub.o: HogeSub.cpp
    $(CC) $(CFLAGS) -o HogeSub.o -c HogeSub.cpp

clean:
    rm -f *.o main
  1. All ターゲットが呼び出される
  2. All ターゲットに依存ファイル main.o HogeSub.o と書かれているため、main.o ターゲットが呼び出され、コマンドが実行される(main.oファイルができる)
  3. HogeSub.o ターゲットが呼び出される(HogeSub.oファイルができる)
  4. 依存ファイルが解消されたので、 All ターゲットが呼び出される

-gデバッグ情報、 -Wall は警告オプションを全て有効にする

ちょっとカッコよくなってきたMakefile

コマンドが使えること、サフィックスルールを知ったら↓みたいになった。

CC = g++
CFLAGS = -g -Wall
SRC = $(shell ls *.cpp)
OBJS = $(SRC:%.cpp=%.o)

All:$(OBJS)
    $(CC) $(CFLAGS) -o main $(OBJS)

clean:
    rm -f *.o main

戯言

  • 順に仕組みを知っていけばわかることが多い。
  • Makefileって使わないことが多いのでインプットを増やしていかないと。
  • これで分割コンパイルができるようになったので次は何しようかなー。

トリビアmakefile入門
http://www.jsk.t.u-tokyo.ac.jp/~k-okada/makefile/

【CentOS7】libpqxxインストール

個人でプログラム書く時はpythonがメインですが、新しい言語にもチャレンジしていこうということで、C++を使ってみようと思います。

今日のお話

centos7にlibpqxxライブラリをインストール
※libpqxxはpostgresqlへ接続するためのクライアントライブラリ 

開発言語

C++

環境

インストール手順

$ sudo su -
$ yum -y install gcc-c++
# yum -y install postgresql-devel
# yum install scl-utils centos-release-scl
# yum install xmlto
# yum install devtoolset-8
# source scl_source enable devtoolset-8
# echo "source scl_source enable devtoolset-8" >> ~/.bash_profile 
# yum -y install python3
# wget https://github.com/jtv/libpqxx/archive/6.4.7.tar.gz
# tar zxvf 6.4.7.tar.gz
# cd 6.4.7
# ./configure
# make
# make install

気付き

  • yumコマンドで標準インストールできるgcc/g++のバージョンってOS全体で使われているもの。
  • ライブラリのコンパイルの時に新しいバージョンのg++を使う必要がある時もある。
  • Software Collections はOS標準モジュールでは使われていない、新しいバージョンのモジュールをインストールする仕組み(みたいな感じ)
  • source scl_source enable devtoolset-8 を継続して使う場合は、 .bash_profile などに登録が必要。
  • make clean でmakeに失敗して出来上がったオブジェクトファイルを削除可能。(念のためのメモ)

戯言

  • pythonとかライブラリをインストールする時って pip install 〇〇 ってやるだけだったのでgcc/g++について全く考えたことなかったんですが、gcc/g++にもバージョンがあるんですね。普通に考えたらありますよね....。これに気づくまで時間がかかりました。
  • これで libpqxx が使えるようになったぞー!引き続き連携方法についても書いていこう!