ブログの説明

学校に通わないで学んだことを記しています。間違っているところが何かありましたらご指摘下さると幸いです。コメントに対する返信が遅れる可能性があります。その場合は申し訳ありません。

このブログではサイドバーに広告を表示しています。このブログ内の投稿記事を検索するには右上の拡大鏡のアイコンを、アーカイブやラベル付けから投稿記事を閲覧するには左上の三重線のアイコンをクリックして下さい。

数式の表示にはMathJaxを利用させていただいています。数式の表示のためにJavaScriptが有効である必要があります。そうでない場合、訳の分からないLatexのコードが表示されます。幾何学図形やチャートの表示にはHTML5 CanvasやGoogle Chartを使用しています。その表示のためにもJavaScriptが有効である必要があります。

Debian GNU/Linux 10でLibreOffice 6 BaseをPostgreSQL 11に接続するには?

今回の目標は、LibreOffice BaseとPostgreSQLを接続し、LibreOffice BaseをPostgreSQLデータベース・サーバーのクライアントとして使うこと。その準備をすること。

LibreOffice Baseはデータベース・クライアントのひとつ。標準ではHSQLDBまたはFireBirdというデータベースのクライアントとして働く。LibreOffice Baseは外部のデータベースとも接続することができる。

結論から先に書くと、Debian GNU/Linux 10ではlibreoffice-sdbc-postgresqlというdebパッケージをインストールし、PostogreSQLサーバーが稼動している状態でLibreOffice Baseを起動し、データベース・ウィザードでもってhost=localhost dbname=postogresを対象にして接続すればいい。PostgreSQLのデフォルトのデータベース名はpostgresで、スーパーユーザー名はpostgres。

以下、ここではPostgreSQLとの接続の手順を書き留める。

ここで前提となるソフトウェア構成は次のとおり。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 10 (buster)
Release:        10
Codename:       buster

PostgreSQLのバージョンは次のとおり。

$ psql --version
psql (PostgreSQL) 11.7 (Debian 11.7-0+deb10u1)

LibreOfficeのバージョンは次のとおり。

$ libreoffice --version
LibreOffice 6.1.5.2 10(Build:2)

PostgreSQLのインストール

Debian GNU/Linux 10 (buster)では公式のリポジトリからpostgresqlというdebパッケージをインストールする。これによってPostgreSQLのクライアント用debパッケージも同時にインストールされるはず。

$ su
# apt update; apt install postgresql
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  postgresql-11 postgresql-client-11 sysstat
(中略)
成功しました。以下のようにしてデータベースサーバを起動できます。

    pg_ctlcluster 11 main start

Ver Cluster Port Status Owner    Data directory              Log file
11  main    5432 down   postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11-main.log
(以下省略)

この他にも、PostgreSQLのためのグラフィカルな管理ツールであるpgAdminやウェブ・ベースの管理ツールであるphpPgAdminをインストールしておくと役に立つかもしれない。

$ su
# apt update; apt install pgadmin3 phppgadmin

PostgreSQLをDebian GNU/Linux 10のdebパッケージでインストールすると、デフォルトでは/var/lib/postgresql/11/mainディレクトリ内にデータベースが置かれる。ログファイルは/var/log/postgresql/postgresql-11-main.logになる。

PostgreSQLデータベース・サーバーの自動起動設定

postgresqlのインストールに成功すると同時にPostgreSQLが自動的に稼動しはじめる。

初期状態のPostgreSQLではDebian GNU/Linuxが起動するときにPostgreSQLサーバーが自動的に起動する設定になっている。システムの起動時にそれが自動的に起動しないようにするには、systemctlコマンドかserviceコマンドを用いてpostgresqlを対象にdisableを指定する。

$ su
# systemctl disable postgresql
または
$ su
# service postgresql disable

この設定を元に戻すにはenableを指定する。

$ su
# systemctl enable postgresql

PostgreSQLサーバーの起動・停止・状態表示

Linuxディストリビューションにはサーバーをサービス(デーモンとも呼ばれる)として管理する方法がある。そのためには、systemctlコマンドやserviceコマンド、Debianの伝統的流儀では/etc/init.dディレクトリ内のスクリプトを利用する方法がある。

PostgreSQLはそれ独自の起動方法をいくつか持っている。postgresqlのdebパッケージをインストールした際に指示された方法はpg_ctlclusterを使うことだった。こちらの方法はPostgreSQL専用のスーパーユーザーであるpostgres権限で利用できることにその特徴がある。

後者の方法は前者に反映されず、前者の方法は後者に反映される。というわけで、Linuxディストリビューションの流儀に従って前者の方法を採用したほうが良さそう。

PostgreSQLサーバーの現在の状態を確認するには次のようする。スーパーユーザー権限が必要。

$ su
# systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; disabled; vendor pres
   Active: active (exited) since Wed ......

Active: active (exited)と表示されていれば稼働中。この画面から抜け出すにはqキーを押す。

serviceコマンドを使っても同じことができる。

$ su
# service postgresql status
● postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; disabled; vendor pres
   Active: inactive (dead) since Wed ......

Active: inactive (dead)と表示されている場合は停止中。この画面から抜け出すにはqキーを押す。

PostgreSQLサーバーを起動するには次のようにする。スーパーユーザー権限が必要。

$ su
# systemctl start postgresql

serviceコマンドを用いても同じことができる。

$ su
# service postgresql start

PostgreSQLサーバーを停止するには次のようにする。スーパーユーザー権限が必要。

$ su
# systemctl stop postgresql

serviceコマンドでも同じことができる。

$ su
# service postgresql stop

status、start、stopの他にもrestart(再起動)、reload(設定の再読込み)を利用することができる。

PostgreSQLで新しいロール(ユーザー)を作成

PostgreSQLはインストール直後にpostgresというデータベースとpostgresというデータベース・ロール(ユーザーとほぼ同義)をすでに持っている。そのため、postgresというロールを用いてpostgresというデータベースを対象にLibreOffice Baseを接続することができる。

しかしここでは、新たなデータベース・ロールと新たなデータベースを作成しておくことにする。

suやsudo -sを使ってLinuxのスーパーユーザーになり、そこからさらにsuやsudo -sを使ってpostgresになる。

$ su
# su - postgres
postgres@host$

postgres@ホスト名$というプロンプトが表示されるはず。

データベース・ロール(ユーザー)を作成するにはcreateuserコマンドを用いる。-Pオプションを指定するとパスワードを設定することができる。

postgres@host$ createuser -P user_a
新しいロールのためのパスワード: 
もう一度入力してください:

user_aは任意のロール名。設定するパスワードを2回繰り返し入力して完了。

新しいデータベースを作成

デフォルトのデータベースであるpostgresを使わずに新しいデータベースを作成してみる。

新しいデータベースを作成するには、suかsudo -sによってLinuxのスーパーユーザーになった後にさらにsuかsudo -sによってpostgresユーザーになった後、createdbコマンドを用いる。

$ su
# su - postgres
postgres@host$ createdb mydb

ここではmydbという名のデータベースを新たに作成した。

データベースの一覧を表示するにはこの状態からpsqlを起動して\lと入力してEnterキーを押す。

postgres@host$ psql
postgres=# \l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |     アクセス権限      
-----------+----------+------------------+-------------+-------------------+-----------------------
 mydb      | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | 
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | 
 template0 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
(4 行)

psqlを終了させるには\qと入力してEnterキーを押す。

postgres=# \q
postgres@host$

Postgresql SDBCドライバのインストール

Debian GNU/Linux 10 (buster)の公式リポジトリにあるlibreoffice-sdbc-postgresqlというdebパッケージをインストールする。この処理にはLinuxのスーパーユーザー権限が必要。

$ su
# apt update; apt install libreoffice-sdbc-postgresql

LibreOffice BaseとPostgreSQLを接続する

PostgreSQLサーバーを再起動したら、いよいよ接続の手順に入る。

# systemctl restart postgresql
  1. PostgreSQLが稼動していることを確認する。稼動していなければ起動する。
  2. LibreOffice Baseを起動する。そうするとデータベース・ウィザードが表示される。
  3. 「既存のデータベースに接続」にチェックを入れて「PostgreSQL」を選んで「次へ」。

    リストにPostgreSQLが表示されていない場合、libreoffice-sdbc-postgresqlというdebパッケージがインストールされていない可能性がある。

  4. データソースの入力フォームに次のように入力して「次へ」。
    host=localhost dbname=mydb

    dbname=にはデータベース名を指定する。デフォルトのデータベースであるpostgresか、または既に作成されている他のデータベースを指定する。ここでは先ほど作成しておいたmydbというデータベースを指定しておいた。

  5. ユーザー名に先ほど作成したロール名を入力し、パスワードを設定した場合、「パスワードを要求する」にチェックを入れて「接続のテスト」ボタンを押す。そして「認証が必要です」でパスワードを入力してOKボタンを押す。
  6. 「接続が正常に確立できました」と表示されたらOKボタンを押して「次へ」。

    ここで接続に失敗した場合、なんらかの問題がある。

  7. 「データベースを保存した後の処理を決定してください」ではデフォルトのままで(それを変更する必要がなければ)「完了」を押す。
  8. そして最後に名前を付けて適当な場所にこれらの設定をファイルとして保存する。

    次回からは「既存のデータベースファイルを開く」でここで保存したファイルを選ぶ。

これでPostgreSQLサーバーとLibreOffice Baseとの間の接続作業が完了。

テーブルを作成

「ウィザードを利用してテーブルを作成...」というBaseの機能を利用してテーブルを作成してみる。

  1. 「テーブル」の「タスク」一覧から「ウィザードを利用してテーブルを作成...」を選んで「テーブルウィザード」を起動する。
  2. 「テーブルのフィールドを選択」では、例えば「カテゴリー」から「個人用」にチェックを入れる。
  3. 「サンプルテーブル」から例えば「CD コレクション」を選ぶ。
  4. 「利用できるフィールド」の全てかそのいくつかを「選択されたフィールド」側に移動させる。そして「次へ」。

    フィールドとはテーブル(表)の列のこと。

  5. 「フィールドの種類と書式の設定」では、フィールドの追加や削除や並べ替え、そして、フィールド名の変更、フィールドの種類(データのタイプ)の設定、入力が必須かどうかの設定、文字数または桁数の設定ができる。今回は何も手を加えずに「次へ」。
  6. 「プライマリーキーの設定」では、プライマリーキーの方法を選択することができる。ここでは何も手を加えずに「次へ」。

    プライマリーキーとはそのテーブルの中からその行(レコード)に固有のデータのようなもの。そのデータを検索するとその行(レコード)が1つだけ選び出されるための鍵となるもの。

  7. 「表の作成」では「テーブルの名前」と「テーブルのカタログ」を設定する。今回はテーブルの名前をそのままにしてテーブルのカタログを「public」にした。
  8. 「次に何を実行しますか」はデフォルトのままで「完了」を押す。
  9. 「テーブル」の一覧の中にpublicというカテゴリーが作られ、その下位に「CD コレクション」というテーブルが作られたはず。

テーブルを削除するにはその上で右クリックをして表われたメニューの中から「削除」を選べばいい。

入力用または参照用のフォームを作成

フォーム・ウィザードを利用してフォームを作成することもできる。その手順はだいたい次のとおり。

  1. 先ほど作成した「CD コレクション」というテーブルの上で右クリックによって表われたメニューの中から「フォームウィザード」を選ぶ。そうするとフォームウィザードが起動する。
  2. 「フォームのフィールドを選択」では、「使用可能なフィールド」の全てかそのいくつかを「フォーム内のフィールド」側へ移動させる。そして「次へ」。
  3. 「サブフォームを設定するかどうかを決定」では、今回は何も手を加えずに「次へ」。
  4. 「フォーム上のコントロールを整列」では、フォームの整形を自動的に行ってくれる。ここではいちばん左側の整列スタイルを選んでみた。そして「次へ」。
  5. 「データ入力モードを選択」では、新規入力専用フォームにするか既存のデータも表示させるフォームにするかを選んでチェックを入れる。後者を選んだ場合、変更・削除・追加を不可能にする場合にさらにチェックを入れる。そして「次へ」。
  6. 「フォームのスタイルの適用」では、フォームの背景色やフィールド枠の装飾を選ぶ。そして「次へ」。
  7. 最後に、フォーム名とその後の処理を決めて「完了」を押す。

これで例えば次のようなフォームが作成される。

LibreOffice Baseのさらに詳しい使い方についてはまたの機会に。

参考にしたサイトのURL

PostgreSQLに関するDebianのWiki(英文)
https://wiki.debian.org/PostgreSql
日本PostgreSQLユーザ会のサイトにあるPostgreSQLの日本語ドキュメント
https://www.postgresql.jp/document/
LibreOfficeの公式サイト(日本語)
https://ja.libreoffice.org

コメント

このブログの人気の投稿

Visual Studio 2019にはC++のためのフォームデザイナーがない件

10の補数と9の補数と2の補数と1の補数

LibreOffice 6 Calcでフォーム(ダイアログ)を作成してマクロで表示