ページ

2014年4月27日日曜日

postgresのバックアップを1ファイルずつgoogleドライブに保存する

自分用に作ったpostgresを1ファイルずつGoogleドライブに保存したいと考えシェルを作成。
pg_dumpを利用し対処1ファイルずつなのは除外したいDBもあるためです。
GoogleドライブはGoogleから出ているアプリを利用しフォルダに移動するだけなので保存すること自体は簡単です。
DropBoxとかもディレクトリを変更すれば対応できると思います。
※Macを利用しているのでLinux系では一部動作しない可能性もあります。
その際は一部改変が必要になるかと思います。


バックアップ詳細はDB名_yyyyMMdd.tar.gzで保存されています。
while read部分が少し戸惑いました。
パイプを利用してreadを行うないようです。




#/bin/sh

DATE=`date "+%Y%m%d"` # 日付のフォーマット
TMP_DIR="/tmp/pg_dump_$DATE" # 作業ディレクトリ
EXECLUDE_DB="template|postgres" # バックアップ除外対象
BACKUP_DIR="/Users/genya/Google ドライブ/backup" # バックアプディレクトリ
DB_USER=postgres # 動作ユーザー

# 作業ディレクトリ作成
echo "作業用ディレクトリを作成 $TMP_DIR"
mkdir $TMP_DIR

# DB一覧を取得する.
psql -c "select datname FROM pg_database;" -t -U postgres | while read db_name
do
 if [ -z "$db_name" ]; then
  continue
 fi
 # バックアップ対象外を除外
 DB_COUNT=`echo "$db_name" | grep  -E "($EXECLUDE_DB)" | wc -l`
 if [ "$DB_COUNT" -eq "1" ]; then
  echo "execlude database no backup $db_name"
  continue
 fi
 echo "backup database:$db_name"
 # バックアップ
 pg_dump -U $DB_USER $db_name > ${TMP_DIR}/${db_name}.sql
 # 圧縮
 tar zcvf ${TMP_DIR}/${db_name}_${DATE}.tar.gz ${TMP_DIR}/${db_name}.sql >/dev/null 2>&1
 # 元のファイルを削除
 rm ${TMP_DIR}/${db_name}.sql
 # googleドライブに移動
 mv ${TMP_DIR}/${db_name}_${DATE}.tar.gz "${BACKUP_DIR}/${db_name}_${DATE}.tar.gz"
done

# 作業ディレクトリ削除
rm -rf $TMP_DIR

2014年4月9日水曜日

postgresで区切り文字を集計する

備忘録のないようです。

以下のように「,」区切りの文字が連結されている状態でグループ化を行うための操作を記述

CREATE TABLE nodes(tags TEXT);
INSERT INTO nodes VALUES('tag1,tag2,tag3');
INSERT INTO nodes VALUES('tag1,tag3');
INSERT INTO nodes VALUES('tag1,tag3');
INSERT INTO nodes VALUES('tag1,tag4,tag5');
このデータを以下のようにしたい
tag   | count 
-------+-------
 tag1  |     4
 tag3  |     3
 tag2  |     1
 tag4  |     1
 tag5  |     1

このような処理はどのようにと呼ぶのか分からないがニュアンス的には
・区切り文字配列化
・パース配列化
・文字列分割結合
などか?

正式名称が知りたい・・・・
とりあえずSQLだけ記載
SELECT tag, COUNT(tag) FROM (SELECT UNNEST(STRING_TO_ARRAY(tags, ',')) FROM nodes) AS T1 GROUP BY tag ORDER BY COUNT(tag) DESC, tag;
UNNESTとSTRING_TO_ARRAYを利用することで対応が可能である。

UNNESTで検索を行うといろいろ応用が出てくるので参考にしてみたい。
とりあえず自分の目的は上記で解決です。

2014年3月19日水曜日

mavenとiciqlのインストール手順

Javaを利用する機会があり、せっかくなので新しいO/Rマッパーを試そうと思い探していて見つけたのが

iciqlとよばれるO/Rマッパーです。

以前Seasar2のS2JDBCを利用していましたが
軽量ということで使い心地はわからないがとりあえず試してみようと思います。

以下のソフトのインストール手順となります。
Databaseはpostgresを利用します.
・maven
・iciql

OSはmac OS X 10.9.2で行っています。
Postgresは9.3.2を利用しています。

mavenのインストール手順

# mavenをダウンロード
cd ~/Downloads
curl -O http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/maven/maven-3/3.2.1/binaries/apache-maven-3.2.1-bin.tar.gz
# 展開
tar xvzf apache-maven-3.2.1-bin.tar.gz
mv apache-maven-3.2.1 apache-maven
mv apache-maven /Applications/
# パスを追加
echo "M2_HOME=/Applications/apache-maven" >> ~/.bash_profile
echo "PATH=$PATH:$M2_HOME/bin" >> ~/.bash_profile
echo "export M2_HOME" >> ~/.bash_profile
echo "export PATH" >> ~/.bash_profile
source ~/.bash_profile


ここまではおなじみの手順です。
mavenのインストールですので特に解説なくいきます。

iciqlインストール

# iciqlのダウンロードとmvnの追加
curl -o https://iciql.googlecode.com/files/iciql-1.2.0.zip
unzip iciql-1.2.0.zip
# mavenリポジトリに追加
mvn install:install-file -Dfile=iciql-1.2.0.jar -DgroupId=com.iciql -DartifactId=iciql -Dversion=1.2.0 -Dpackaging=jar

iciqlはmavenの保存場所が直接見当たらなかったので
自分の環境にDLしローカル内で保存

pom.xmlの作成


  4.0.0
  net.rule.selenium
  roadbike
  0.0.1-SNAPSHOT
  war
  
   
    com.iciql
    iciql
    1.2.0
   
   
  postgresql
  postgresql
  9.1-901.jdbc4
   
  

postgresと一緒にりようするのでiciqlとpostgresqlでpom.xmlを作成
これで「mvn eclipse:eclipse」で環境が整います。

またこちらを利用したentityクラスの自動生成もありますコマンドは以下となります
postgreテーブルの内容をentityとしたjavaファイルに出力します。
cp ~/.m2/repository/com/iciql/iciql/1.2.0/iciql-1.2.0.jar ./iciql-1.2.0.jar 
cp ~/.m2/repository/postgresql/postgresql/9.1-901.jdbc4/postgresql-9.1-901.jdbc4.jar ./postgresql-9.1-901.jdbc4.jar
java -cp iciql-1.2.0.jar:postgresql-9.1-901.jdbc4.jar com.iciql.util.GenerateModels -url "jdbc:postgresql://localhost:5432/postgres" -user postgres -password {PASSWORD}
iciqlを利用し、entityを自動生成が可能です。
ある程度はマッピングしてくれるので、こちらをベースに対応を行うと便利です。

2014年3月10日月曜日

RALEIGH RSRで箱根へ

とうとうミニベロ買いましたRALEIGH RSRです。

10段ギアの105がシーンに応じ利用可能なので重宝しています。

いきなりですが、箱根の山に挑戦してきました。
ヒルクライムです。

小田原->箱根->熱海












小田原から1号線をひたすら行くコースで、小田原発-熱海着コースとなります。

ミニベロ輪行
輪行中の状態













箱根の山へ挑戦しようと思い18切符行くためまずは
東京から小田原まで輪行です(これも初
左ミニベロ用の輪行袋オーストリッチ ちび輪バッグ・ミニベロ 輪行バッグ ブラックです。
これに入れました。右は、700ccの折りたたみです。
やっぱり小さいが少し長いです。



RALEIGH RSR
小田原駅近くのセブンイレブンにて













とりあえず、前輪を入れサドルの高さを調整しスタート準備中

箱根途中の橋


途中の駅で休憩
山頂までの途中の写真です。雪があるのかと思ったのですがこのあたりはほとんどないです。

箱根 874m地点で撮影













箱根874m地点に到着結構長い道のりでした。(体力不足
この辺りはすごく寒いです。測道には結構雪があります。
漕いでいるとそこまで気にならないですがここから主に下り・・・


ここからさらに1号線を進み芦ノ湖へ











到着するまで寒い・・・
下りは速度がでます。だいたいブレーキなしだと
40〜50km/h程度になります。
手袋していても驚くほど寒いそして足先も


芦ノ湖+自転車+富士山+海賊船w
たまたま来ました。

後はメインの下りここの冷えが非常に厳しかった












最後に撮影ここを下り熱海へ行き温泉へ入り帰宅
頑張れば体力のない人でも箱根は登れます
是非お試しをちなみに総時間8hほどです。

2014年2月23日日曜日

bootstrapのテンプレート デザイン性を少し出してみました。

bootstrapのテンプレート
基本的な感じではなくサイトで利用可能なイメージをしてみました。
少し改良すると色を変更し差別化できるかと思います。

タイトルの下にナビゲーションがあるのでこちらがwidth 100%で表示されています。
この部分が特徴的なデザインかと思います。

bootstrap無料テンプレート

コンテンツは、やや狭いと思えば#contents部分のcol-xs-2を調整していただければ
柔軟かと思います。

フッターはシンプルにしていますのでカスタマイズ必要かも?

ブログのイメージですが、その他にも活用可能かと思います。
端を消して2カラム、1カラム構成も可能です。

それぞれ、header、navigator、contents、pager、footerの単位で区切っているので
間を追加する場合はこちらに挟めば対応できます。


以下ソースです。
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>bootstrap3ノ進め方</title>
        <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
        <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap-theme.min.css">
        <!--[if lt IE 9]>
        <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
        <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
        <![endif]-->
        <script type="text/javascript" src="//code.jquery.com/jquery-1.11.0.min.js"></script>   
        <script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
        <style type="text/css">
        <!--
        #header {
            height: 50px;
            width: 100%;
            text-align: center;
        }
        #footer {
            background-color: #428bca;
            background-image: -moz-linear-gradient(top, #428bca, #222222);
            background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#428bca), to(#222222));
            background-image: -webkit-linear-gradient(top, #428bca, #222222);
            background-image: -o-linear-gradient(top, #428bca, #222222);
            background-image: linear-gradient(to bottom, #428bca, #222222);
            background-repeat: repeat-x;
            border-color: #428bca;
            height: 60px;
            text-align: center;
        }
        #navigator {
            background-color: #428bca;
            background-image: -moz-linear-gradient(top, #428bca, #222222);
            background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#428bca), to(#222222));
            background-image: -webkit-linear-gradient(top, #428bca, #222222);
            background-image: -o-linear-gradient(top, #428bca, #222222);
            background-image: linear-gradient(to bottom, #428bca, #222222);
            background-repeat: repeat-x;
            border-color: #428bca;
        }
        .navbar-grad {
          background-color: #428bca;
          background-image: -moz-linear-gradient(top, #428bca, #222222);
          background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#428bca), to(#222222));
          background-image: -webkit-linear-gradient(top, #428bca, #222222);
          background-image: -o-linear-gradient(top, #428bca, #222222);
          background-image: linear-gradient(to bottom, #428bca, #222222);
          background-repeat: repeat-x;
          border-color: #428bca;
         filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0);
        }
        .navbar-grad > .active  > a{
          background-color: #428bca;
          background-image: -moz-linear-gradient(top, #428bca, #222222);
          background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#428bca), to(#222222));
          background-image: -webkit-linear-gradient(top, #428bca, #222222);
          background-image: -o-linear-gradient(top, #428bca, #222222);
          background-image: linear-gradient(to bottom, #428bca, #222222);
          background-repeat: repeat-x;
          border-color: #428bca;
         filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0);
        }
        
        .navbar-grad > li > a:hover, .navbar-grad > li > a:focus {
            background-color: #428bca;
        }
        #contents {
            margin-top: 10px;
        }
        #pager {
            text-align: center;
        }
        </style>
    </head>
    <body>
        <div id="header"><h1>bootstrap無料テンプレート</h1></div>
        <div id="navigator" class="row">
            <div class="col-xs-2" style="background-color: #428bca;"></div>
            <div class="col-xs-8" style="">
                <ul class="nav nav-pills nav-justified navbar-grad">
                  <li class="active"><a href="#" >ブログ</a></li>
                  <li><a href="#" >このサイトについて</a></li>
                  <li><a href="#" >メッセージ</a></li>
                  <li><a href="#" >コンテンツ</a></li>
                </ul>
            </div>
            <div class="col-xs-2" style="background-color: #428bca;"></div>
        </div>
        <div id="contents" class="container">
            <div class="row">
              <div class="col-xs-2" style="">
              <div class="panel panel-primary">
                  <div class="panel-heading">
                    <h3 class="panel-title">最新記事</h3>
                  </div>
                  <ul class="list-group">
                    <li class="list-group-item"><a href="#">テンプレート1</a></li>
                    <li class="list-group-item"><a href="#">テンプレート2</a></li>
                    <li class="list-group-item"><a href="#">テンプレート3</a></li>
                    <li class="list-group-item"><a href="#">テンプレート4</a></li>
                  </ul>
                </div>
                <div class="panel panel-primary">
                  <div class="panel-heading">
                    <h3 class="panel-title">アーカイブ</h3>
                  </div>
                  <div class="panel-body"><a href="#">2014/02月 <span class="badge">12</span></a></div>
                  <div class="panel-body"><a href="#">2014/01月 <span class="badge">12</span></a></div>
                </div>
              </div>
              <div class="col-xs-8">
               <div class="row">
                  <div class="col-sm-6 col-md-4">
                    <div class="thumbnail">
                      <img src="256x256.png" alt="">
                      <div class="caption">
                        <h3>画像サムネイル</h3>
                        <p>画像の説明です。ここに説明文を入れると様々な内容で表示が可能です。</p>
                        <p><a href="#" class="btn btn-primary">リンク</a></p>
                      </div>
                    </div>
                  </div>
                  <div class="col-sm-6 col-md-4">
                    <div class="thumbnail">
                      <img src="256x256.png" alt="">
                      <div class="caption">
                        <h3>画像サムネイル</h3>
                        <p>画像の説明です。ここに説明文を入れると様々な内容で表示が可能です。</p>
                        <p><a href="#" class="btn btn-primary">リンク</a></p>
                      </div>
                    </div>
                  </div>
                  <div class="col-sm-6 col-md-4">
                    <div class="thumbnail">
                      <img src="256x256.png" alt="">
                      <div class="caption">
                        <h3>画像サムネイル</h3>
                        <p>画像の説明です。ここに説明文を入れると様々な内容で表示が可能です。</p>
                        <p><a href="#" class="btn btn-primary">リンク</a></p>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
              <div class="col-xs-2">
                <div class="panel panel-primary">
                  <div class="panel-heading">
                    <h3 class="panel-title">カテゴリ</h3>
                  </div>
                  <ul class="list-group">
                    <li class="list-group-item"><a href="#">雑記 <span class="badge">1</span></a></li>
                    <li class="list-group-item"><a href="#">テンプレート集 <span class="badge">8</span></a></li>
                    <li class="list-group-item"><a href="#">デザイン <span class="badge">5</span></a></li>
                    <li class="list-group-item"><a href="#">bootstrap <span class="badge">3</span></a></li>
                  </ul>
                </div>
                <div class="panel panel-primary">
                  <div class="panel-heading">
                    <h3 class="panel-title">リンク</h3>
                  </div>
                  <div class="panel-body"><a href="http://joke-tech.blogspot.com/">戯言と技術</a></div>
                </div>
              </div>
            </div>
        </div>
        <div id="pager" class="container" >
            <div class="row">
                <div class="col-xs-12">
                    <ul class="pagination">
                      <li><a href="#">&laquo;</a></li>
                      <li><a href="#">1</a></li>
                      <li><a href="#">2</a></li>
                      <li><a href="#">3</a></li>
                      <li><a href="#">4</a></li>
                      <li><a href="#">5</a></li>
                      <li><a href="#">&raquo;</a></li>
                    </ul>
                </div>
            </div>
        </div>
        <div id="footer">
            <div class="container">
                <p class="muted credit">boostrapテンプレート 3カラム構成</p>
            </div>
        </div>
        </body>
</html>

2014年2月20日木曜日

postgres template1削除方法

今後のメモです。

postgresを利用する際に初期にtemplateを指定できます
こちらがtemplate1と呼ばれるDBが標準で適用されるのですがこちら通常の
フローではdropdb(DROP DATABASE template1)が利用できません
こちらを初期化し再構築する手順をまとめます。
$ psql -U postgres
postgres=# SELECT * FROM pg_database where datname = 'template1';
postgres=# UPDATE pg_database SET datistemplate = 'f' where datname = 'template1';
postgres=# SELECT * FROM pg_database where datname = 'template1';
postgres=# \q
$ dropdb template1
$ createdb -T template0 template1
$ psql -U postgres
postgres=# SELECT * FROM pg_database where datname = 'template1';
postgres=# UPDATE pg_database SET datistemplate = 't' where datname = 'template1';
postgres=# SELECT * FROM pg_database where datname = 'template1';

pg_databaseの中身を書き換えることで実現しています。
この方法が一番らくだと思いますのでメモです。

2014年2月16日日曜日

bootstrap3テンプレート/3カラム構成

bootstrapのテンプレート
3カラム構成バージョンになります。
左にナビゲーション、中央にコンテンツ、右にナビゲーションがあるイメージです。
boostrap 3カラム






簡単な3カラム構成です。他様々なテンプレートが公開されています。
これは非常にシンプルなバージョンです。
次回もう少し良さげなものをあげています。

以下ソースです。
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>bootstrap3ノ進め方</title>
        <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
        <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap-theme.min.css">
        <!--[if lt IE 9]>
        <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
        <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
        <![endif]-->
        <script type="text/javascript" src="//code.jquery.com/jquery-1.11.0.min.js"></script>   
        <script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
        <style type="text/css">
        <!--
        #header {
            height: 50px;
            background-color: #EEE;
            width: 100%;
            text-align: center;
        }
        #footer {
            height: 30px;
            background-color: #AAA;
            text-align: center;
        }
        -->
        </style>
    </head>
    <body>
        <div id="header">3カラム</div>
        <div id="contents" class="container">
            <div class="row">
              <div class="col-xs-3" style="background-color: #CCC;">
                ナビゲーション1<br />
                ナビゲーション2<br />
                ナビゲーション3<br />
                ナビゲーション4<br />
              </div>
              <div class="col-xs-6">
                テキスト1<br />
                テキスト2<br />
                テキスト3<br />
                テキスト4<br />
                テキスト5<br />
                テキスト6<br />
                テキスト7<br />
                テキスト8<br />
                テキスト9<br />
              </div>
              <div class="col-xs-3" style="background-color: #CCC;">
                右ナビゲーション1<br />
                右ナビゲーション2<br />
                右ナビゲーション3<br />
                右ナビゲーション4<br />
              </div>
            </div>
        </div>
        <div id="footer">フッター</div>
        </body>
</html>