2017年5月14日

Azure Database for PostgreSQLにアクセスしてみた

5/11のMicrosoft Build 2017で、PostgreSQLのDBaaSがAzureで提供されることが発表されました。
現時点ではプレビューのようですが、ちょっと興味があったので軽く触ってみました。

ちなみに、Azureは普段使っていないのでそんなに詳しくありません。

■PostgreSQLのリソースを作成する


まず、Azureのダッシュボードで「PostgreSQL」と検索すると、PostgreSQLのリソースが出てきます。


そこで「追加」を選び、入力項目を適当に埋めて「作成」を実行すると、数分経ってPostgreSQLのリソースが作成されます。

■PostgreSQLに接続する


リソースが作成されただけだと外部から接続ができないので、「設定」→「接続のセキュリティ」から接続を許可するネットワークを指定します。


すると、外部からでもpsqlで普通に接続できるようになりました。
[snaga@localhost ~]$ psql -h hostname.postgres.database.azure.com -U snaga@hostname postgres
Password for user snaga@hostname:
psql (9.6.0, server 9.6.2)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-SHA384, bits: 256, compression: off)
Type "help" for help.

postgres=> select version();
                           version
-------------------------------------------------------------
 PostgreSQL 9.6.2, compiled by Visual C++ build 1800, 64-bit
(1 row)

ちなみに、Azureで「サーバー管理者ログイン名」として作成しているユーザは、PostgreSQLで言うところのスーパーユーザーではありませんので注意が必要でしょう。まぁ、PostgreSQLのDBaaSはどこも同じだと思いますが。
postgres=> select * from pg_user;
     usename     | usesysid | usecreatedb | usesuper | userepl | usebypassrls |  passwd  | valuntil | useconfig
-----------------+----------+-------------+----------+---------+--------------+----------+----------+-----------
 azure_superuser |       10 | t           | t        | t       | t            | ******** |          |
 snaga           |    12900 | t           | f        | f       | f            | ******** |          |
(2 rows)
Collationは「C」ではなかったので、この辺は注意が必要かもしれません。
postgres=> \l
                                                           List of databases
   Name    |      Owner      | Encoding |          Collate           |           Ctype            |          Access privileges
-----------+-----------------+----------+----------------------------+----------------------------+-------------------------------------
 postgres  | azure_superuser | UTF8     | English_United States.1252 | English_United States.1252 |
 template0 | azure_superuser | UTF8     | English_United States.1252 | English_United States.1252 | =c/azure_superuser     +
           |                 |          |                            |                            | azure_superuser=CTc/azure_superuser
 template1 | azure_superuser | UTF8     | English_United States.1252 | English_United States.1252 | =c/azure_superuser     +
           |                 |          |                            |                            | azure_superuser=CTc/azure_superuser
(3 rows)

■EXTENSIONを見てみる


さて、PostgreSQL と言えば EXTENSION です。

というわけで、最初からセットアップされている EXTENSION と、追加で使える EXTENSION を確認してみました。

以下は最初からインストールされている EXTENSION です。
postgres=> select * from pg_extension;
      extname       | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition
--------------------+----------+--------------+----------------+------------+-----------+--------------
 plpgsql            |       10 |           11 | f              | 1.0        |           |
 pg_stat_statements |       10 |         2200 | t              | 1.4        |           |
 pg_buffercache     |       10 |         2200 | t              | 1.2        |           |
(3 rows)

以下は CREATE EXTENSION を実行すれば使える EXTENSION です。プレビューだからか、ちょっと少な目な感じでしょうか。個人的には PL/Python などが使えるといいのになぁと思います。
postgres=> select * from pg_available_extensions;
             name             | default_version | installed_version |                                                       comment
------------------------------+-----------------+-------------------+---------------------------------------------------------------------------------------------------------------------
 address_standardizer         | 2.3.2           |                   | Used to parse an address into constituent elements. Generally used to support geocoding address normalization step.
 address_standardizer_data_us | 2.3.2           |                   | Address Standardizer US dataset example
 btree_gin                    | 1.0             |                   | support for indexing common datatypes in GIN
 btree_gist                   | 1.2             |                   | support for indexing common datatypes in GiST
 citext                       | 1.3             |                   | data type for case-insensitive character strings
 fuzzystrmatch                | 1.1             |                   | determine similarities and distance between strings
 hstore                       | 1.4             |                   | data type for storing sets of (key, value) pairs
 intarray                     | 1.2             |                   | functions, operators, and index support for 1-D arrays of integers
 pgcrypto                     | 1.3             |                   | cryptographic functions
 pgrouting                    | 2.3.2           |                   | pgRouting Extension
 pg_buffercache               | 1.2             | 1.2               | examine the shared buffer cache
 pg_partman                   | 2.6.3           |                   | Extension to manage partitioned tables by time or ID
 pg_prewarm                   | 1.1             |                   | prewarm relation data
 pg_stat_statements           | 1.4             | 1.4               | track execution statistics of all SQL statements executed
 pg_trgm                      | 1.3             |                   | text similarity measurement and index searching based on trigrams
 plpgsql                      | 1.0             | 1.0               | PL/pgSQL procedural language
 postgis                      | 2.3.2           |                   | PostGIS geometry, geography, and raster spatial types and functions
 postgis_sfcgal               | 2.3.2           |                   | PostGIS SFCGAL functions
 postgis_tiger_geocoder       | 2.3.2           |                   | PostGIS tiger geocoder and reverse geocoder
 postgis_topology             | 2.3.2           |                   | PostGIS topology spatial types and functions
 postgres_fdw                 | 1.0             |                   | foreign-data wrapper for remote PostgreSQL servers
 unaccent                     | 1.1             |                   | text search dictionary that removes accents
 uuid-ossp                    | 1.1             |                   | generate universally unique identifiers (UUIDs)
(23 rows)

ちなみに、スーパーユーザー権限ではないユーザでCREATE EXTENSIONできるんだっけ?というのを確認してみたのですが、一応、CREATE EXTENSIONできるようです。
postgres=> create extension hstore;
CREATE EXTENSION
postgres=> create extension postgis;
CREATE EXTENSION
postgres=> create extension pg_trgm;
CREATE EXTENSION
postgres=>

■AzureのPostgreSQLリソースの設定項目


ざっと見た感じ、以下のような設定ができるようです。

サーバパラメータ

監視できるメトリックス

サーバログ

■まとめ


というわけで、ざっと Azure Database for PostgreSQL を見てみました。

このエントリは、Azure Database for PostgreSQL を使い始めるところから1時間弱くらいで書き上げているわけですが、DBaaSは楽だなぁと改めて感じました。

一方で、PostgreSQLの良さの一部には、アプリケーション開発における拡張性や柔軟性の高さがあったりするわけですが、この辺りをDBaaSでどこまで実現できるのかというのが(サービス提供側の)難しさなのかなぁ、という気もします。(まぁ、使える EXTENSION とかは決めの問題のような気もしますが。)

Azure Database for PostgreSQL はDBaaSとしては後発だと思うので、後発ならではの工夫や特徴があるともっと面白くなりそうだなぁと感じました(MADlibが使える、とか)。

では、また。

0 件のコメント:

コメントを投稿