ラベル 開発 の投稿を表示しています。 すべての投稿を表示
ラベル 開発 の投稿を表示しています。 すべての投稿を表示

20140309

任意の日付、日時から一定間隔でタイムスタンプを出力するSQL

-- postgres 9.x

-- 5minuits interval table sample

SELECT

    timestamp '2014/01/01 00:00' + cast( i || 'minutes' as interval)

from

    generate_series(0,1440,5)s(i)

;

20130924

PerlのNull判定

PHPとか他の言語と一緒に組んでると、いつも忘れるので、リマインド。

if( !defined($auau) ){処理A} else {処理B}

$auau = ""     ->処理A
$auau = 0    ->処理B

pg_dumpとリストア

★pg_dump [DB名] > [ダンプファイルパス/ファイル名]
 →プレーンテキストダンプ
 →リストア:psql -U postgres -f [ダンプファイルパス/ファイル名]

★pg_dump -Fc [DB名] > [ダンプファイルパス/ファイル名]
 →アーカイブ(バイナリ)ダンプ
 →リストア:pg_restor -C -d postgres -U postgres -f [ダンプファイルパス/ファイル名]

20130214

出力するデータにナンバリングするSQL関数

使えそうなので、リマインド。

[確認:PostgreSQL 9.1、SQL Server 2005]
※MySQL、Oracleは使えるっぽいが、未確認。

#---
ROW_NUMBER() OVER(ORDER BY item1,item2...)
#---

ex)
SELECT ROW_NUMBER() OVER(ORDER BY item1) as rows,item1, item2 FROM table WHERE item1 <= '5';

rows Item1 Item2
#---
1 1 B
2 2 D
3 3 F
4 4 H
5 5 J

ナンバリングした番号に条件を付けたいとき。

select * from
(SELECT ROW_NUMBER() OVER(ORDER BY item1) as rows , item2 FROM table) tbl
where rows between '200' and '299';


ipv6でbgp

ciscoのルータではまったので、リマインド。
基本的な設定は以下の通りでうまく行きました。

!---
IOS version:15.0

!---
!active ipv6 routing
!---
(config)# ipv6 unicast-routing

!---
!interface to ISP router
!---
(config-if)# ipv6 address [----:----:----:----::-/--]*1
(config-if)# ipv6 enable
*1 ISPから払い出されているIPアドレスを設定。

!---
!interface to LAN
!---
(config-if)# ipv6 address [----:----:----:----::-/--]*2
(config-if)# ipv6 enable
*2 ISPから払い出されているNWアドレスから割当てたIPアドレスを設定。

!---
!bgp routing
!---
(config)# router bgp [-----]*3
*3 ISPから払い出されているプライベートAS番号を設定。

(config-router)# bgp router-id [-.-.-.-]*4
*4 IPv6には自動的に設定されなくて、かつ無くては動かないので適当に設定する。例:1.1.1.1。

(config-router)# bgp log-neighbor-changes
↑ 隣接ルータとのBGP接続が状態変化した際にログへ出力する設定。
(config-router)# bgp graceful-restart restart-time 120
(config-router)# bgp graceful-restart stalepath-time 360
(config-router)# bgp graceful-restart
↑ グレースフルリスタートの設定。経路情報が障害等で取得できない状況でも、パケット転送を継続させること。
(config-router)# neighbor [----:----:----:----::-/--]*5 remote-as [-----]*6
↑ 接続先のAS情報を設定。
(config-router)# neighbor [----:----:----:----::-/--]*5 update-source FastEthernet [-/--]*7
↑ BGPメッセージの送信元IPアドレスを設定。これがないとリンクローカルアドレスにて通信を行う可能性があり、ルーティングがうまくいかない。
(config-router)# address-family ipv6
(config-router-af)# network [----:----:----::/--]*8
↑ 自身が経路広告するネットワークを設定。
(config-router-af)# neighbor [----:----:----:----::-/--]*5 activate
↑ 隣接インターフェースのBGP接続を有効にする。
(config-router-af)# neighbor [----:----:----:----::-/--]*5 soft-reconfiguration inbound
↑ 隣接インターフェースからのUPDATEメッセージ内容を保持する。必要ないかもしれない。

(config)# ipv6 route [----:----:----::/--]*8 Null0
↑ パケットのループを防止するために、経路広告しているNWを集約する。

*5 ISPから通知されている対向のインターフェースIPアドレスを設定。
*6 ISPから通知されている接続先のAS番号を設定。
*7 ISPの対向ルータへ接続するインターフェース番号を指定。FastEthernetでなくても良い。
*8 ISPから払い出されているNWアドレスを設定。

!---
!check bgp routing
!---
#show ipv6 route (bgp)
#show bgp ipv6
#show bgp ipv6 unicast summry
#show bgp ipv6 unicast neightbors [----:----:----:----::-]*5 advertised-routes
↑ 自身が経路広告できているかを確認する。
#show bgp ipv6 unicast neightbors [----:----:----:----::-]*5 received-routes
↑ 隣接ルータから経路を受信できているかを確認する。

20121227

[perl]PostgreSQLへファイルをCOPY FROMする

はまったので。

普通に



したら、ファイル読み込みエラー発生。

標準入力 STDINで回避。

#---以下参考

use DBI;
use DBD::Pg;

#DBへ接続
my $dbh = DBI->connect("dbi:Pg:dbname=【データベース名】;host=【ホスト名またはIPアドレス】","【ユーザ名】","【パスワード】") or die 'ERROR';
#>パスワードがなければ省略可

#COPY SQLを実行
my $Fg = $dbh->do("copy 【テーブル名】(【項目1】,【項目2】) from STDIN using delimiters ','");
#>項目は、ファイル内容に合わせて設定する
#>using delimitersは、ファイルのデータ型に合わせて設定する
#>using delimitersを省略した場合、タブ区切りのデータが初期値で設定されている

#COPY SQL実行 成功判断
if ( $? != 0 ){
#失敗
die 'ERROR';
} else {
#成功
#インポートするファイルを読込む
open(fh ,">","【ファイルパス・名】");

while(){
#念のため
chomp($_);
#一行づつ標準入力
$dbh->func( $_."n",'putline' );
#>putlineはDBDがインストールされていない場合利用できない
}

#終了行を出力(決まりごと)
$dbh->func( "\\.\n",'putline' );

#COPY終了
$dbh->func( 'endcopy' );

#ファイルを閉じる
close(fh);

}
#DBへの接続を切断
$dbh->disconnect;

[perl]DBI,DBDモジュールインストール確認コマンド(Linux)

perl -MDBD::Pg -e ''
perl -MDBI -e ''

20121009

PHP CSVダウンロードの怪

PHPでサーバ上にCSVファイルを作成し、ダウンロードすると先頭に文字化けした文字がついてしまい、はまったのでメモ。

ダウンロードしてファイルをExcel閲覧すると、最初の日付データの書式がおかしい。
正確に言うと、次の行の日付書式は「YYYY/MM/DD」なのに、先頭が「YYYY-MM-DD」となっている。
作成データ的にはDBの書式なので「YYYY-MM-DD」が正しいのだが、どうもExcelの認識として、日付ではなく文字列として認識して表示してるようだ。

何で?とおもってテキストエディタで閲覧してみたら、先頭に「?」がくっついている。
何だ?とおもってCSVデータ作成過程を見直してもおかしなところは見当たらない。
作成したサーバ上のCSVを見ても「?」は無い。

PHPの設定はUTF-8、ダウンロードページもUTF-8、ファイルもUTF-8。
どうしても取れない。

調べてみたら、「Byte Order Mark」通称BOM(ボム)って物らしい。
ボムはエンディアン(データ順の指定)のためにくっついているらしい。

さて、どうやって取ったらいいの?

ボムはソースファイルに巣食っているらしく、PHPのソースファイルを全て「UTF-8N」で保存しなおしたら、消えた。。
「UTF-8N」ってのは、UTF-8のボム無って意味らしい。(テキストエディタによって違うと思います。)

知らんがな。

20121003

net-snmp インストール

環境:CentOS 5.5 / x64
条件:検証環境のためインターネットへの接続不可(yum不可)。CDROMの利用不可。

依存関係がひどくて苦労したのでメモを残す。
Linuxを理解していないから苦労するんだろうけど。。。

<net-snmpって>
LinuxのサーバでSNMPを使えるようにするパッケージだ。

<必要なパッケージ>
--- net-snmp 5.3.2.2.1 CentOS5.8/x64
net-snmp-libs-5.3.2.2-17.el5.x86_6
net-snmp-devel-5.3.2.2-17.el5.x86_64.rpm
net-snmp-5.3.2.2-17.el5.x86_64.rpm
net-snmp-perl-5.3.2.2-17.el5.x86_64.rpm
net-snmp-utils-5.3.2.2-17.el5.x86_64.rpm
--- その他
beecrypt-4.1.2-10.1.1.x86_64.rpm
beecrypt-devel-4.1.2-10.1.1.x86_64
elfutils-devel-0.137-3.el5.x86_64.rpm
elfutils-devel-static-0.137-3.el5.x86_64.rpm
lm_sensors-devel-2.10.7-9.el5.x86_64.rpm
lm_sensors-2.10.7-9.el5.x86_64.rpm

<ダウンロードサイト>
http://rpmfind.net/linux/RPM/index.html

<インストール順>
1 # rpm -ivh net-snmp-libs-5.3.2.2-17.el5.x86_6
2 # rpm -ivh lm_sensors-2.10.7-9.el5.x86_64.rpm
3 # rpm -ivh net-snmp-5.3.2.2-17.el5.x86_64.rpm
4 # rpm -ivh net-snmp-perl-5.3.2.2-17.el5.x86_64.rpm
5 # rpm -ivh net-snmp-utils-5.3.2.2-17.el5.x86_64.rpm
6 # rpm -ivh beecrypt-4.1.2-10.1.1.x86_64.rpm
7 # rpm -ivh beecrypt-devel-4.1.2-10.1.1.x86_64
8 # rpm -ivh elfutils-devel-0.137-3.el5.x86_64.rpm elfutils-devel-static-0.137-3.el5.x86_64.rpm

特にこれ。相互依存関係だから、ちくしょうっていった。

9 # rpm -ivh lm_sensors-devel-2.10.7-9.el5.x86_64.rpm
10# rpm -ivh net-snmp-devel-5.3.2.2-17.el5.x86_64.rpm

20120928

phplot

X軸ラベル表示ではまったのでメモ。
PHP+Postgre で timestamp型の値をX値としてエリアグラフ化した際、どうもX軸ラベル表示が日付で表示されない。

ポイントは、以下のデータプロット仕様が理解できていなかったことと、表示ラベルには2種類あること、アンドPHPのデータ変換。
この3つのポイントでうまく表示が出来た。

参考資料が英語ばかりで時間が掛かった。。

#仕様
・データのプロット //基本は以下の2つ
+ text-data
  - array([label],[y1],[y2]…);

+ data-data
  - array([label],[x],[y1],[y2]…);

#設定例
・SetDataType
- ('data-data')

・SetXLabelType //X軸ラベルフォーマットタイプ
- ('time','%m/%d %H:%M') //日付日時型

・SetXDataLabelPos //X軸データ値表示設定
- ('none') //非表示

・SetXTickLabelPos //X軸ラベル表示設定
- ('plotdown') //軸下へ表示

・SetXTickIncrement //X軸ラベル表示間隔設定
- ('20000') //秒単位

・X軸グラフデータ
- postgres timestamp 型 -> php strtotime(); 変換

・データ設定例
- $graphData[1] = array(strtotime('2012/09/25 10:10:10'),strtotime('2012/09/25 10:10:10'),22,33);

20120912

[xampp portable]phpからpostgresqlに接続したい

PHPの開発環境として、USBにxamppをインストールしてPostgreSQLサーバへ接続させたかった。
が。。。
PHPのPostgreSQL関数が動作しない。

原因は、2つ。

・「php.ini」にPostgreSQLを利用する設定がされていないから
・起動時に「libpq.dll」が読込まれていないから

まず、「php.ini」にPostgreSQLを利用する設定をする。
以下の設定値の「;」コメントアウトを削除。

---
;extension=php_pgsql.dll

extension=php_pgsql.dll
---

「libpq.dll」は、「/xampp/php」にあるのだけども、読込まないらしい。

解決法を探したら、「/xampp/apache/httpd.conf」に以下の設定を追加して、強制的に読込ませる。

---
LoadFile "/php/libpq.dll"
---

以上で無事動いた。

20120908

これははまった

postgreのアップデートではまった。

OS:CentOS5.5
PostgreSQL8.3 → 9.1.5

rpmでアンインストール。
初心者みたいなものだから、これでOKだと思ってた。

次、rpmで9.1.5をインストール。

あれ、サービスが起動しない。。
1はまり。

エラーが、「すでにプロセス起動してるぜ。」だって。

プロセス見てみると、postmasterが複数起動してやがる。

全てkill。

起動した。
何これ。
まあいいかと思って、psqlを起動しようとすると。。。

「クライアントエンコードがおかしいよ。」ってでる。
2はまり。

よく見ると、/usr/local/pgsqlは残ってる。
知ってた。けどスルーした。コレがまずかった。

もともといるpostgresユーザのホームディレクトリが、/usr/local/pgsqlになってた。

usermod -d /var/lib/pgsql postgres

で解決。

まとめると、アンインストールの手順は、

1.パッケージのアンインストール
2.サービスの削除
3.postgresのホームディレクトリ変更

となる。(もともとpostgreでDBが構築されていた場合。まっさらな状態だったらはまらなかったので。)
きをつけろ。