Windows8 で動作確認

新しいパソコンが Windows8 なので 自分の公開しているツールが動くかどうか試してみました。

VB5,6 の基本ライブラリしか使用していないので そこさえサポートしてくれていれば動くと思いましたが ちゃんと動きました。

デザインやら色々変わって使いにくいと感じることもありますが この辺りの互換性に関しては すごいと思います。

PostgreSQL でデフォルトの表領域の変更

PostgreSQL にはデータベースのデフォルトの表領域があります。 テーブルなどのデータベースのオブジェクトを作成するときに 表領域を指定しなければ、そのデータベースのデフォルトの表領域に作成されます。

次の場合、データベース database1 は tablespace1 を デフォルトの表領域として設定しています。

db=# \x
Expanded display is on.

db=# \l+
List of databases
-[ RECORD 1 ]-----+--------------------------
Name              | database1
Owner             | postgres
Encoding          | UTF8
Collation         | en_US.UTF-8
Ctype             | en_US.UTF-8
Access privileges |
Size              | 51 MB
Tablespace        | tablespace1
Description       |

このデフォルトの表領域の変更ですが PostgreSQL の 8.4 からは ALTER DATABASE 文で 行うことができます。

db=# ALTER DATABASE database1 SET TABLESPACE tablespace2;

これで表領域が tablespace2 になります。

db=# \l+
List of databases
-[ RECORD 1 ]-----+--------------------------
Name              | database1
Owner             | postgres
Encoding          | UTF8
Collation         | en_US.UTF-8
Ctype             | en_US.UTF-8
Access privileges |
Size              | 51 MB
Tablespace        | tablespace2
Description       |

データベースクラスタのデフォルトの表領域に変更する場合は 次のように表領域に pg_default を指定します。

db=# ALTER DATABASE database1 SET TABLESPACE pg_default;

8.4 までは createdb コマンドを使って次のように 変更したりしていたんですが、バージョンアップの内容も 追いかけておかないと 新しいバージョンを使ってるメリットを享受できないですね。

$ createdb -T database1 -D pg_default database2;

cross-database references are not implemented

PostgreSQL の PL/pgSQL のトリガーで 以下のようなエラーがでることがあります。

ERROR:  cross-database references are not implemented: test.table1.column1
CONTEXT:  compilation of PL/pgSQL function "test_af_chg" near line 4

原因のひとつとして、PL/pgSQL プログラム内の 変数の定義で %TYPE が抜けてる場合があります。

DECLARE
   wk_column1 test.table1.column1;

この場合、上記のエラーがでます。

正しくは、下のようになります。

DECLARE
   wk_column1 test.table1.column1%TYPE;

意外と気づきにくいです。

ファイルサーバをイントラネットに追加する

メモです。

WindowsXP なで作業していると ファイルサーバからネットワーク越しにファイルをコピーしようとしたときに 「このゾーンからファイルを移動したり、コピーできるようにしますか?」と 警告が出ることがあります。

この場合、エクスプローラの右下に表示されるゾーンが 「インターネット」になっています。

WRITE_0690_01

このゾーンを「イントラネット」にすれば 警告が出なくなります。

まず、インターネットオプションを開きます。

WRITE_0690_03

セキュリティタブで 「イントラネット」のアイコンをクリックして 「サイト」ボタンを押します。

WRITE_0690_04

「詳細設定」ボタンを押します。

「次の Web サイトをゾーンに追加する」に ファイルサーバの IP アドレスを入れます。 ワイルドカードが使えるので 「192.168.1.*」のようにまとめて指定することもできます。

WRITE_0690_05

あとは「OK」ボタンを押して、パソコンを再起動します。

ファイルサーバのゾーン表示が「イントラネット」に変わりました。 (画像を撮った環境が違うのでウィンドウのデザインが違いますが気にしないでください)

WRITE_0690_02

これで警告が出なくなりました。

PostgreSQL で ROWNUM みたいなことをしたい

ORACLE には ROWNUM という擬似列があって 結果セットに番号を振って取得することができます。 (ORDER BY に影響を受けるので順番に番号が付かないこともありますが)

PostgreSQL ではウィンドウ関数(window function)を使うと 同じようなことができます。

次のような感じです。

db=# SELECT (ROW_NUMBER() OVER()) AS rownum, f1 FROM table1;

 rownum | f1
--------+----
      1 | A
      2 | B
      3 | C
      4 | D
      5 | E
(5 rows)

ちなみにウィンドウ関数は 標準SQL に規定されているもので PostgreSQL のみにある考え方ではありません。

積ん読 2013/03/15

サイトの更新を再開します

新しいパソコンが着たので サイトの更新を再開します。
これからもよろしくお願いします。

サイトの更新が滞ってます

1ヶ月ぶりの更新です。

実はサイトを更新していたパソコンが壊れてしまい サイトの更新が止まっています。 来てくださった方、更新がなく申し訳ありません。

もうすぐ新しいパソコンが来るので 更新を再開します。 再開したら またよろしくお願いします。

Google サイト内検索

Amazonアソシエイト