<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>database | ITとガジェットあれこれ</title>
	<atom:link href="https://sandambara.com/category/database/feed" rel="self" type="application/rss+xml" />
	<link>https://sandambara.com</link>
	<description>sandambara.com</description>
	<lastBuildDate>Sun, 26 Mar 2023 12:31:18 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>

<image>
	<url>https://sandambara.com/wp-content/uploads/2021/03/icon.ico</url>
	<title>database | ITとガジェットあれこれ</title>
	<link>https://sandambara.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>PostgreSQLバージョンアップ（9.6→14.7）</title>
		<link>https://sandambara.com/versionup-postgresql-from9-6to14-7?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=versionup-postgresql-from9-6to14-7</link>
					<comments>https://sandambara.com/versionup-postgresql-from9-6to14-7#respond</comments>
		
		<dc:creator><![CDATA[sandambara]]></dc:creator>
		<pubDate>Sun, 26 Mar 2023 12:00:00 +0000</pubDate>
				<category><![CDATA[database]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[開発]]></category>
		<guid isPermaLink="false">https://sandambara.com/?p=2195</guid>

					<description><![CDATA[<p>自宅の開発環境を漸くバージョンアップしたので備忘録として書きました。 目次 環境新バージョンのPostgreSQLインストールpg_hba.conの編集作業用ディレクトリ作成pg_upgrade実行update_exte [&#8230;]</p>
The post <a href="https://sandambara.com/versionup-postgresql-from9-6to14-7">PostgreSQLバージョンアップ（9.6→14.7）</a> first appeared on <a href="https://sandambara.com">ITとガジェットあれこれ</a>.]]></description>
										<content:encoded><![CDATA[<p>自宅の開発環境を漸くバージョンアップしたので備忘録として書きました。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">環境</a></li><li><a href="#toc2" tabindex="0">新バージョンのPostgreSQLインストール</a></li><li><a href="#toc3" tabindex="0">pg_hba.conの編集</a></li><li><a href="#toc4" tabindex="0">作業用ディレクトリ作成</a></li><li><a href="#toc5" tabindex="0">pg_upgrade実行</a></li><li><a href="#toc6" tabindex="0">update_extensions.sql実行</a></li><li><a href="#toc7" tabindex="0">vacuumdb実行</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">環境</span></h2>



<ul class="wp-block-list">
<li>Windows11(22H2)</li>



<li>Windws Server 2022 Standard(21H2)</li>
</ul>



<p>いずれもDebian11で動かしているVirtual Box上の仮想マシンです。</p>



<h2 class="wp-block-heading"><span id="toc2">新バージョンのPostgreSQLインストール</span></h2>



<p>今回私は14.7を選択しました（15はスキーマの取り扱いが変わるのでまたの機会に）。いずれのプラットフォームでもこちらから入手できます。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-none">

<a rel="noopener" href="https://www.postgresql.jp/download" title="ダウンロード" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fwww.postgresql.jp%2Fdownload?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">ダウンロード</div><div class="blogcard-snippet external-blogcard-snippet">ダウンロードリンク PostgreSQLのWindows インストーラ、Linux ディストリビューション・パッケージ、ソースアーカイブ等のサイトへのリンク集です。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.postgresql.jp/download" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.postgresql.jp</div></div></div></div></a>
</div>



<p>この後の作業で新旧両方のDBを並行稼働させますから、新DBのポート番号は旧DBと異なるポート番号を指定しましょう。</p>



<h2 class="wp-block-heading"><span id="toc3">pg_hba.conの編集</span></h2>



<p>移行元・移行先ともpg_hba.confのMETHODを全てtrustに変更します。変更前にオリジナルのバックアップを忘れないようにしましょう。あと、サービスの再起動もお忘れなく。</p>



<h2 class="wp-block-heading"><span id="toc4">作業用ディレクトリ作成</span></h2>



<p>旧DBの内容を取り出し保存する先を作成します。今回私はCドライブ直下にworkというフォルダを作りEveryoneフルコントロールとしました。</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="439" height="397" src="https://sandambara.com/wp-content/uploads/2023/03/image-1.png" alt="" class="wp-image-2202" srcset="https://sandambara.com/wp-content/uploads/2023/03/image-1.png 439w, https://sandambara.com/wp-content/uploads/2023/03/image-1-300x271.png 300w" sizes="(max-width: 439px) 100vw, 439px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="715" height="413" src="https://sandambara.com/wp-content/uploads/2023/03/image-2.png" alt="" class="wp-image-2203" srcset="https://sandambara.com/wp-content/uploads/2023/03/image-2.png 715w, https://sandambara.com/wp-content/uploads/2023/03/image-2-300x173.png 300w, https://sandambara.com/wp-content/uploads/2023/03/image-2-120x68.png 120w" sizes="(max-width: 715px) 100vw, 715px" /></figure>



<h2 class="wp-block-heading"><span id="toc5">pg_upgrade実行</span></h2>



<p>ここまでの準備だけで引っ越し作業をまるっと行ってくれるpg_upgrade.exeという非常に便利なツールがあります。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="954" height="645" src="https://sandambara.com/wp-content/uploads/2023/03/image-3.png" alt="" class="wp-image-2205" srcset="https://sandambara.com/wp-content/uploads/2023/03/image-3.png 954w, https://sandambara.com/wp-content/uploads/2023/03/image-3-300x203.png 300w, https://sandambara.com/wp-content/uploads/2023/03/image-3-768x519.png 768w" sizes="(max-width: 954px) 100vw, 954px" /><figcaption class="wp-element-caption">pg_upgrade.exe</figcaption></figure>



<p>あとはこれを実行するだけです。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-none">

<a rel="noopener" href="https://www.postgresql.jp/document/14/html/pgupgrade.html" title="pg_upgrade" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fwww.postgresql.jp%2Fdocument%2F14%2Fhtml%2Fpgupgrade.html?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">pg_upgrade</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.postgresql.jp/document/14/html/pgupgrade.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.postgresql.jp</div></div></div></div></a>
</div>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="97" src="https://sandambara.com/wp-content/uploads/2023/03/image-4-1024x97.png" alt="" class="wp-image-2206" srcset="https://sandambara.com/wp-content/uploads/2023/03/image-4-1024x97.png 1024w, https://sandambara.com/wp-content/uploads/2023/03/image-4-300x28.png 300w, https://sandambara.com/wp-content/uploads/2023/03/image-4-768x73.png 768w, https://sandambara.com/wp-content/uploads/2023/03/image-4-1536x146.png 1536w, https://sandambara.com/wp-content/uploads/2023/03/image-4-2048x194.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>公式ドキュメントでは上記のように記述されていますが、コマンドプロンプトを管理者として実行し、下記要領でユーザー名を指定して実行すればうまくいきました。</p>



<pre class="wp-block-code"><code>pg_upgrade -U postgres -d 旧データベースクラスタのパス -D 新データベースクラスタのパス -b 旧データベースbinディレクトリのパス -B 新データベースbinディレクトリのパス</code></pre>



<p>その際、先ほど作成した作業用ディレクトリへ移動してから実行します。私の環境ではこんな感じです。</p>



<pre class="wp-block-code"><code>cd C:\work
"C:\Program Files\PostgreSQL\14\bin\pg_upgrade.exe" -U postgres -d "C:\Program Files\PostgreSQL\9.6\data" -D "C:\Program Files\PostgreSQL\14\data" -b "C:\Program Files\PostgreSQL\9.6\bin" -B "C:\Program Files\PostgreSQL\14\bin"</code></pre>



<p>ターンッ（Enterキー）</p>



<pre class="wp-block-code"><code>整合性チェックを実行しています。
-----------------------------
Checking cluster versions                                   ok
Checking database user is the install user                  ok
Checking database connection settings                       ok
Checking for prepared transactions                          ok
Checking for system-defined composite types in user tables  ok
Checking for reg* data types in user tables                 ok
Checking for contrib/isn with bigint-passing mismatch       ok
Checking for user-defined encoding conversions              ok
Checking for user-defined postfix operators                 ok
Checking for incompatible polymorphic functions             ok
Checking for tables WITH OIDS                               ok
Checking for invalid "sql_identifier" user columns          ok
Checking for invalid "unknown" user columns                 ok
Creating dump of global objects                             ok
Creating dump of database schemas
                                                            ok
Checking for presence of required libraries                 ok
Checking database user is the install user                  ok
Checking for prepared transactions                          ok
Checking for new cluster tablespace directories             ok

この後pg_upgradeが失敗した場合は、続ける前に新しいクラスタを
initdbで再作成する必要があります。

アップグレードを実行しています。
------------------
Analyzing all rows in the new cluster                       ok
Freezing all rows in the new cluster                        ok
Deleting files from new pg_xact                             ok
Copying old pg_clog to new server                           ok
Setting oldest XID for new cluster                          ok
Setting next transaction ID and epoch for new cluster       ok
Deleting files from new pg_multixact/offsets                ok
Copying old pg_multixact/offsets to new server              ok
Deleting files from new pg_multixact/members                ok
Copying old pg_multixact/members to new server              ok
Setting next multixact ID and offset for new cluster        ok
Resetting WAL archives                                      ok
Setting frozenxid and minmxid counters in new cluster       ok
Restoring global objects in the new cluster                 ok
Restoring database schemas in the new cluster
                                                            ok
ユーザーリレーションのファイルをコピーしています
                                                            ok
Setting next OID for new cluster                            ok
Sync data directory to disk                                 ok
Creating script to delete old cluster                       ok
Checking for hash indexes                                   ok
Checking for extension updates                              notice

環境にALTER EXTENSIONコマンドで更新すべき機能拡張があります。以下のファイル
    update_extensions.sql
を、psqlを使用してデータベースのスーパーユーザーとして実行することで、これらの機能拡張
が更新されます。


アップグレードが完了しました
----------------
オプティマイザーの統計情報は、pg_upgrade では転送されません。
新サーバーを起動した後、以下のコマンドを実行することを検討してください:
    C:/Program Files/PostgreSQL/14/bin/vacuumdb -U postgres --all --analyze-in-stages

このスクリプトを実行すると、旧クラスタのデータファイル delete_old_cluster.batが削除されます:


c:\work></code></pre>



<p>後はupdate_extensions.sqlとvacuumdbの実行だけですが、これらを実行する前に新DBのpostgresql.confを編集してポートを5432へ戻しておきます。このタイミングでpg_hba.confを修正しても問題ありませんが、他から繋ぎに来られる可能性があるのであれば後回しにしましょう。</p>



<h2 class="wp-block-heading"><span id="toc6">update_extensions.sql実行</span></h2>



<p>ここまでの作業でサービスは停止していますので、ポートを変更したらサービスを起動します。update_extensions.sqlの中身は「ALTER EXTENSION &#8220;adminpack&#8221; UPDATE;」だけですのでpostgresでログインして直接実行しても構いません。</p>



<h2 class="wp-block-heading"><span id="toc7">vacuumdb実行</span></h2>



<p>後はvacuumdbの実行です（DB名を***で伏せています）。</p>



<pre class="wp-block-code"><code>c:\work>"C:/Program Files/PostgreSQL/14/bin/vacuumdb" -U postgres --all --analyze-in-stages
vacuumdb: データベース"***"の処理中です: 最適化のための情報を最小限生成します(1対象)
vacuumdb: データベース"***"の処理中です: 最適化のための情報を最小限生成します(1対象)
vacuumdb: データベース"***"の処理中です: 最適化のための情報を最小限生成します(1対象)
vacuumdb: データベース"***"の処理中です: 最適化のための情報を最小限生成します(1対象)
vacuumdb: データベース"***"の処理中です: 最適化のための情報を最小限生成します(1対象)
vacuumdb: データベース"postgres"の処理中です: 最適化のための情報を最小限生成します(1対象)
vacuumdb: データベース"template1"の処理中です: 最適化のための情報を最小限生成します(1対象)
vacuumdb: データベース"***"の処理中です: 最適化のための情報を複数生成します(10対象)
vacuumdb: データベース"***"の処理中です: 最適化のための情報を複数生成します(10対象)
vacuumdb: データベース"***"の処理中です: 最適化のための情報を複数生成します(10対象)
vacuumdb: データベース"***"の処理中です: 最適化のための情報を複数生成します(10対象)
vacuumdb: データベース"***"の処理中です: 最適化のための情報を複数生成します(10対象)
vacuumdb: データベース"postgres"の処理中です: 最適化のための情報を複数生成します(10対象)
vacuumdb: データベース"template1"の処理中です: 最適化のための情報を複数生成します(10対象)
vacuumdb: データベース"***"の処理中です: 最適化のための情報をデフォルト数(全て)生成します
vacuumdb: データベース"***"の処理中です: 最適化のための情報をデフォルト数(全て)生成します
vacuumdb: データベース"***"の処理中です: 最適化のための情報をデフォルト数(全て)生成します
vacuumdb: データベース"***"の処理中です: 最適化のための情報をデフォルト数(全て)生成します
vacuumdb: データベース"***"の処理中です: 最適化のための情報をデフォルト数(全て)生成します
vacuumdb: データベース"postgres"の処理中です: 最適化のための情報をデフォルト数(全て)生成します
vacuumdb: データベース"template1"の処理中です: 最適化のための情報をデフォルト数(全て)生成します

c:\work>

</code></pre>



<p>この作業は旧DBのデータベースクラスタ削除を含んでいます。「このスクリプトを実行すると、旧クラスタのデータファイル delete_old_cluster.batが削除されます:」の日本語は微妙で「このスクリプトを実行すると、delete_old_cluster.batが旧クラスタのデータファイルを削除します:」と書きたかったのでしょうね。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="789" height="396" src="https://sandambara.com/wp-content/uploads/2023/03/image-5.png" alt="" class="wp-image-2207" srcset="https://sandambara.com/wp-content/uploads/2023/03/image-5.png 789w, https://sandambara.com/wp-content/uploads/2023/03/image-5-300x151.png 300w, https://sandambara.com/wp-content/uploads/2023/03/image-5-768x385.png 768w" sizes="(max-width: 789px) 100vw, 789px" /><figcaption class="wp-element-caption">dataが削除されています</figcaption></figure>



<p>後は動作確認を済ませて終了です！</p>The post <a href="https://sandambara.com/versionup-postgresql-from9-6to14-7">PostgreSQLバージョンアップ（9.6→14.7）</a> first appeared on <a href="https://sandambara.com">ITとガジェットあれこれ</a>.]]></content:encoded>
					
					<wfw:commentRss>https://sandambara.com/versionup-postgresql-from9-6to14-7/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>WSL2でPostgreSQLとApacheとPHPを使えるようにする（OracleLinux8.5 systemd対策あり）</title>
		<link>https://sandambara.com/oraclelinux85-with-postgresql-apache-php-using-wsl2?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=oraclelinux85-with-postgresql-apache-php-using-wsl2</link>
					<comments>https://sandambara.com/oraclelinux85-with-postgresql-apache-php-using-wsl2#respond</comments>
		
		<dc:creator><![CDATA[sandambara]]></dc:creator>
		<pubDate>Sun, 20 Nov 2022 09:00:00 +0000</pubDate>
				<category><![CDATA[database]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[開発]]></category>
		<guid isPermaLink="false">https://sandambara.com/?p=2158</guid>

					<description><![CDATA[<p>webシステムの勉強を始めようと環境構築に勤しんだ記録です。今回はVirtualBoxやHyper-VではなくWSL2で挑戦しました（作業機のOSはWindows11 Pro 22H2です）。 目次 WSL2インストール [&#8230;]</p>
The post <a href="https://sandambara.com/oraclelinux85-with-postgresql-apache-php-using-wsl2">WSL2でPostgreSQLとApacheとPHPを使えるようにする（OracleLinux8.5 systemd対策あり）</a> first appeared on <a href="https://sandambara.com">ITとガジェットあれこれ</a>.]]></description>
										<content:encoded><![CDATA[<p>webシステムの勉強を始めようと環境構築に勤しんだ記録です。今回はVirtualBoxやHyper-VではなくWSL2で挑戦しました（作業機のOSはWindows11 Pro 22H2です）。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">WSL2インストール</a></li><li><a href="#toc2" tabindex="0">要るものを最初に入れる</a></li><li><a href="#toc3" tabindex="0">最初にやること（systemdを使えるようにする）</a></li><li><a href="#toc4" tabindex="0">PostgreSQL15のインストール</a></li><li><a href="#toc5" tabindex="0">Apacheのインストール</a></li><li><a href="#toc6" tabindex="0">PHP8のインストール</a></li><li><a href="#toc7" tabindex="0">動作テスト</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">WSL2インストール</span></h2>



<p>PowerShellを起動しコマンド一発です。拍子抜けするほど簡単でした。</p>



<pre class="wp-block-code"><code>wsl --install</code></pre>



<p>このコマンドですとUbuntuがインストールされます。Ubuntuで良い場合はこれでOKなのですが、私はPostgreSQLを慣れた環境で使いたかったのでRHEL系を探してみました。</p>



<pre class="wp-block-code"><code>wsl --list -o</code></pre>



<p>利用可能な一覧が表示されます。</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://sandambara.com/wp-content/uploads/2022/11/image-1024x402.png" alt="" class="wp-image-2160" width="840" height="329" srcset="https://sandambara.com/wp-content/uploads/2022/11/image-1024x402.png 1024w, https://sandambara.com/wp-content/uploads/2022/11/image-300x118.png 300w, https://sandambara.com/wp-content/uploads/2022/11/image-768x301.png 768w, https://sandambara.com/wp-content/uploads/2022/11/image.png 1317w" sizes="(max-width: 840px) 100vw, 840px" /><figcaption>wsl &#8211;list -o</figcaption></figure>



<p>OracleLinux8.5で作ることにしました。</p>



<pre class="wp-block-code"><code>wsl --install -d OracleLinux_8_5</code></pre>



<p>インストールが始まり少し待つと別ウインドウでOracleLinuxが表示されます。ユーザー名とパスワードを入力するとインストール完了です。なんとも簡単です。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="243" src="https://sandambara.com/wp-content/uploads/2022/11/001installwsl-1-1024x243.png" alt="" class="wp-image-2162" srcset="https://sandambara.com/wp-content/uploads/2022/11/001installwsl-1-1024x243.png 1024w, https://sandambara.com/wp-content/uploads/2022/11/001installwsl-1-300x71.png 300w, https://sandambara.com/wp-content/uploads/2022/11/001installwsl-1-768x182.png 768w, https://sandambara.com/wp-content/uploads/2022/11/001installwsl-1-1536x364.png 1536w, https://sandambara.com/wp-content/uploads/2022/11/001installwsl-1.png 2031w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>OracleLinux8.5 on WSL</figcaption></figure>



<h2 class="wp-block-heading"><span id="toc2">要るものを最初に入れる</span></h2>



<p>後の作業で必要になるものや自分が使いやすいエディタを忘れないうちに入れておきます。キャプチャは取っていませんがdnf updateもやっておきましょう。この記事を作ったときはやり忘れていました（あはっ）。</p>



<pre class="wp-block-code"><code>sudo dnf install epel-release</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="544" src="https://sandambara.com/wp-content/uploads/2022/11/002dnf-install-epel-release-1024x544.png" alt="" class="wp-image-2163" srcset="https://sandambara.com/wp-content/uploads/2022/11/002dnf-install-epel-release-1024x544.png 1024w, https://sandambara.com/wp-content/uploads/2022/11/002dnf-install-epel-release-300x159.png 300w, https://sandambara.com/wp-content/uploads/2022/11/002dnf-install-epel-release-768x408.png 768w, https://sandambara.com/wp-content/uploads/2022/11/002dnf-install-epel-release.png 1438w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>epel-release</figcaption></figure>



<pre class="wp-block-code"><code>sudo dnf install nano htop neofetch</code></pre>



<p>neofetchは完全に個人的な趣味ですw</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="684" src="https://sandambara.com/wp-content/uploads/2022/11/004dnf-install-nano-htop-neofetch-1024x684.png" alt="" class="wp-image-2164" srcset="https://sandambara.com/wp-content/uploads/2022/11/004dnf-install-nano-htop-neofetch-1024x684.png 1024w, https://sandambara.com/wp-content/uploads/2022/11/004dnf-install-nano-htop-neofetch-300x200.png 300w, https://sandambara.com/wp-content/uploads/2022/11/004dnf-install-nano-htop-neofetch-768x513.png 768w, https://sandambara.com/wp-content/uploads/2022/11/004dnf-install-nano-htop-neofetch.png 1416w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>nano htop neofetch</figcaption></figure>



<h2 class="wp-block-heading"><span id="toc3">最初にやること（systemdを使えるようにする）</span></h2>



<p>WSL環境ではsystemctlを使おうとすると「System has not been booted with systemd as init system (PID 1).」とお𠮟りを受けます。そのまんまで「systemdがPID1じゃない」ということなのですが、これを恒久的に解消するための作業を最初に行います。出でよ、ジェニー！</p>



<pre class="wp-block-code"><code>wget https://github.com/arkane-systems/genie/releases/download/v1.36/genie-1.36-1.fc33.x86_64.rpm</code></pre>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://sandambara.com/wp-content/uploads/2022/11/006systemd-wget-946x1024.png" alt="" class="wp-image-2165" width="841" height="910" srcset="https://sandambara.com/wp-content/uploads/2022/11/006systemd-wget-946x1024.png 946w, https://sandambara.com/wp-content/uploads/2022/11/006systemd-wget-277x300.png 277w, https://sandambara.com/wp-content/uploads/2022/11/006systemd-wget-768x831.png 768w, https://sandambara.com/wp-content/uploads/2022/11/006systemd-wget-1420x1536.png 1420w, https://sandambara.com/wp-content/uploads/2022/11/006systemd-wget.png 1426w" sizes="(max-width: 841px) 100vw, 841px" /><figcaption>genie1.36-1</figcaption></figure>



<pre class="wp-block-code"><code>sudo dnf install genie-1.36-1.fc33.x86_64.rpm</code></pre>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://sandambara.com/wp-content/uploads/2022/11/007dnf-install-genie-1024x819.png" alt="" class="wp-image-2166" width="840" height="671" srcset="https://sandambara.com/wp-content/uploads/2022/11/007dnf-install-genie-1024x819.png 1024w, https://sandambara.com/wp-content/uploads/2022/11/007dnf-install-genie-300x240.png 300w, https://sandambara.com/wp-content/uploads/2022/11/007dnf-install-genie-768x614.png 768w, https://sandambara.com/wp-content/uploads/2022/11/007dnf-install-genie.png 1406w" sizes="(max-width: 840px) 100vw, 840px" /><figcaption>genie1.36-2</figcaption></figure>



<p>ここでpsコマンドを使って状況を見てみましょう。</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://sandambara.com/wp-content/uploads/2022/11/009ps-ef-before-genie-1024x263.png" alt="" class="wp-image-2167" width="840" height="215" srcset="https://sandambara.com/wp-content/uploads/2022/11/009ps-ef-before-genie-1024x263.png 1024w, https://sandambara.com/wp-content/uploads/2022/11/009ps-ef-before-genie-300x77.png 300w, https://sandambara.com/wp-content/uploads/2022/11/009ps-ef-before-genie-768x198.png 768w, https://sandambara.com/wp-content/uploads/2022/11/009ps-ef-before-genie.png 1411w" sizes="(max-width: 840px) 100vw, 840px" /><figcaption>before</figcaption></figure>



<p>では、genieを初期化→開始します。</p>



<pre class="wp-block-code"><code>genie -i
</code></pre>



<p>ちょっと時間がかかるので気長に待ちましょう。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="124" src="https://sandambara.com/wp-content/uploads/2022/11/010genie-installed-1024x124.png" alt="" class="wp-image-2168" srcset="https://sandambara.com/wp-content/uploads/2022/11/010genie-installed-1024x124.png 1024w, https://sandambara.com/wp-content/uploads/2022/11/010genie-installed-300x36.png 300w, https://sandambara.com/wp-content/uploads/2022/11/010genie-installed-768x93.png 768w, https://sandambara.com/wp-content/uploads/2022/11/010genie-installed.png 1415w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>そして・・・</p>



<pre class="wp-block-code"><code>genie -s</code></pre>



<p>再度psコマンドを実行してみましょう。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="474" src="https://sandambara.com/wp-content/uploads/2022/11/011ps-ef-after-genie-1-1024x474.png" alt="" class="wp-image-2170" srcset="https://sandambara.com/wp-content/uploads/2022/11/011ps-ef-after-genie-1-1024x474.png 1024w, https://sandambara.com/wp-content/uploads/2022/11/011ps-ef-after-genie-1-300x139.png 300w, https://sandambara.com/wp-content/uploads/2022/11/011ps-ef-after-genie-1-768x355.png 768w, https://sandambara.com/wp-content/uploads/2022/11/011ps-ef-after-genie-1.png 1442w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>systemdがPID1になりました</figcaption></figure>



<p>これでめでたくsystemctlを使えるようになったのですが、このままではwslを再起動するとまた元に戻ってしまいますので対処します。</p>



<pre class="wp-block-code"><code>nano ~/.bashrc</code></pre>



<p>ここの末尾へ追記します。</p>



<pre class="wp-block-code"><code>if &#91; "`ps -eo pid,lstart,cmd | grep systemd | grep -v -e grep -e systemd- | sort -n -k2 | awk 'NR==1 { print $1 }'`" != "1" ]; then
  genie -s
fi</code></pre>



<p>こんなふうにしておきます。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="646" src="https://sandambara.com/wp-content/uploads/2022/11/012bashrc-1024x646.png" alt="" class="wp-image-2171" srcset="https://sandambara.com/wp-content/uploads/2022/11/012bashrc-1024x646.png 1024w, https://sandambara.com/wp-content/uploads/2022/11/012bashrc-300x189.png 300w, https://sandambara.com/wp-content/uploads/2022/11/012bashrc-768x484.png 768w, https://sandambara.com/wp-content/uploads/2022/11/012bashrc.png 1416w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>.bashrc</figcaption></figure>



<p>と、ここまで来て「WSLの再起動ってどうするんだろ？」と思ったら一度wslを落としてしまうんですね。PowerShellに戻って実行してください。</p>



<pre class="wp-block-code"><code>wsl --shutdown</code></pre>



<p>これで再度WSLを起動させればOKです。genie -iのときと同じように「！」がいっぱい表示されます。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="100" src="https://sandambara.com/wp-content/uploads/2022/11/013wslrestarted-1024x100.png" alt="" class="wp-image-2172" srcset="https://sandambara.com/wp-content/uploads/2022/11/013wslrestarted-1024x100.png 1024w, https://sandambara.com/wp-content/uploads/2022/11/013wslrestarted-300x29.png 300w, https://sandambara.com/wp-content/uploads/2022/11/013wslrestarted-768x75.png 768w, https://sandambara.com/wp-content/uploads/2022/11/013wslrestarted.png 1404w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>WSL再起動直後</figcaption></figure>



<p>これで何を意識しなくてもsystemctlを使えるようになりました。先人たちの記事がとても参考になりました。感謝！です。</p>



<h2 class="wp-block-heading"><span id="toc4">PostgreSQL15のインストール</span></h2>



<p>以前の記事ではソースコードからコンパイルしました(PostgeSQL10)。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-itとガジェットあれこれ wp-block-embed-itとガジェットあれこれ"><div class="wp-block-embed__wrapper">

<a href="https://sandambara.com/install-postgresql-with-sourcecode" title="コピペ対応！PostgreSQLをソースコードからインストールする" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="80" height="66" src="https://sandambara.com/wp-content/uploads/2020/05/5DAAAC95-7A4C-45C2-9ABC-C0E25CB98346.jpeg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">コピペ対応！PostgreSQLをソースコードからインストールする</div><div class="blogcard-snippet internal-blogcard-snippet">今日は私が愛用するデータベース、PostgreSQLをソースコードからインストールしていこうと思います。インストーラーがある時代になぜソースコードからと思われるかもしれませんが、makeしているときの画面がカッコイイからです（単純）注意事項...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sandambara.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sandambara.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.08.12</div></div></div></div></a>
</div></figure>



<p>今回は最新バージョンの15をdnfでインストールしていきます。そのままだと15が入ってくれないので準備を行います。</p>



<pre class="wp-block-code"><code>sudo dnf install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="579" src="https://sandambara.com/wp-content/uploads/2022/11/014dnf-install-postgresql-1-1024x579.png" alt="" class="wp-image-2174" srcset="https://sandambara.com/wp-content/uploads/2022/11/014dnf-install-postgresql-1-1024x579.png 1024w, https://sandambara.com/wp-content/uploads/2022/11/014dnf-install-postgresql-1-300x170.png 300w, https://sandambara.com/wp-content/uploads/2022/11/014dnf-install-postgresql-1-768x434.png 768w, https://sandambara.com/wp-content/uploads/2022/11/014dnf-install-postgresql-1-120x68.png 120w, https://sandambara.com/wp-content/uploads/2022/11/014dnf-install-postgresql-1-160x90.png 160w, https://sandambara.com/wp-content/uploads/2022/11/014dnf-install-postgresql-1-320x180.png 320w, https://sandambara.com/wp-content/uploads/2022/11/014dnf-install-postgresql-1.png 1413w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>pgdg-redhat-repo</figcaption></figure>



<pre class="wp-block-code"><code>sudo dnf -qy module disable postgresql
</code></pre>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://sandambara.com/wp-content/uploads/2022/11/016disable-postgresql-1024x62.png" alt="" class="wp-image-2175" width="824" height="49" srcset="https://sandambara.com/wp-content/uploads/2022/11/016disable-postgresql-1024x62.png 1024w, https://sandambara.com/wp-content/uploads/2022/11/016disable-postgresql-300x18.png 300w, https://sandambara.com/wp-content/uploads/2022/11/016disable-postgresql-768x47.png 768w, https://sandambara.com/wp-content/uploads/2022/11/016disable-postgresql.png 1395w" sizes="(max-width: 824px) 100vw, 824px" /><figcaption>module disable</figcaption></figure>



<pre class="wp-block-code"><code>sudo dnf install postgresql15-server
</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="583" src="https://sandambara.com/wp-content/uploads/2022/11/017-dnf-install-postgresql15-1024x583.png" alt="" class="wp-image-2176" srcset="https://sandambara.com/wp-content/uploads/2022/11/017-dnf-install-postgresql15-1024x583.png 1024w, https://sandambara.com/wp-content/uploads/2022/11/017-dnf-install-postgresql15-300x171.png 300w, https://sandambara.com/wp-content/uploads/2022/11/017-dnf-install-postgresql15-768x437.png 768w, https://sandambara.com/wp-content/uploads/2022/11/017-dnf-install-postgresql15-120x68.png 120w, https://sandambara.com/wp-content/uploads/2022/11/017-dnf-install-postgresql15-160x90.png 160w, https://sandambara.com/wp-content/uploads/2022/11/017-dnf-install-postgresql15.png 1407w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>postgresql15</figcaption></figure>



<p>これでPostgreSQL15のインストールが終わりました。折角なので設定もしてしまいましょう。</p>



<pre class="wp-block-code"><code>sudo -i -u postgres
/usr/pgsql-15/bin/initdb -D /var/lib/pgsql/15/data
</code></pre>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://sandambara.com/wp-content/uploads/2022/11/019-initdb-1-1024x283.png" alt="" class="wp-image-2178" width="840" height="232" srcset="https://sandambara.com/wp-content/uploads/2022/11/019-initdb-1-1024x283.png 1024w, https://sandambara.com/wp-content/uploads/2022/11/019-initdb-1-300x83.png 300w, https://sandambara.com/wp-content/uploads/2022/11/019-initdb-1-768x212.png 768w, https://sandambara.com/wp-content/uploads/2022/11/019-initdb-1.png 1408w" sizes="(max-width: 840px) 100vw, 840px" /><figcaption>initdb</figcaption></figure>



<p>実ははじめWSLをUbuntuで組んだのですが、Ubuntuのポスグレではinitdbが見当たらなくて焦りました。Ubuntuは先日10年サポートの発表もあったので、使い勝手が揃っていると嬉しいですね。</p>



<p>さて、環境変数を設定しましょう。</p>



<pre class="wp-block-code"><code>nano ~/.bash_profile</code></pre>



<p>末尾に加筆します。</p>



<pre class="wp-block-code"><code>export PATH=/usr/pgsql-15/bin/:$PATH
export LD_LIBRARY_PATH=/usr/pgsql-15/lib/:$LD_LIBRARY_PATH
export PGDATA=/var/lib/pgsql/15/data
</code></pre>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://sandambara.com/wp-content/uploads/2022/11/020bashprofile-1024x331.png" alt="" class="wp-image-2179" width="840" height="271" srcset="https://sandambara.com/wp-content/uploads/2022/11/020bashprofile-1024x331.png 1024w, https://sandambara.com/wp-content/uploads/2022/11/020bashprofile-300x97.png 300w, https://sandambara.com/wp-content/uploads/2022/11/020bashprofile-768x249.png 768w, https://sandambara.com/wp-content/uploads/2022/11/020bashprofile.png 1409w" sizes="(max-width: 840px) 100vw, 840px" /><figcaption>.bash_profile</figcaption></figure>



<p>読み込みなおして完了です。</p>



<pre class="wp-block-code"><code>source ~postgres/.bash_profile</code></pre>



<p>コマンドが通ることを確認しておきましょう！</p>



<pre class="wp-block-code"><code>nano $PGDATA/pg_hba.conf
nano $PGDATA/postgresql.conf
pg_ctl start</code></pre>



<h2 class="wp-block-heading"><span id="toc5">Apacheのインストール</span></h2>



<p>ここは普通にdnf installだけで行えます。セキュリティ対策については触れておりませんのでご注意ください。</p>



<pre class="wp-block-code"><code>sudo dnf install httpd
sudo systemctl enable httpd
sudo systemctl start httpd</code></pre>



<h2 class="wp-block-heading"><span id="toc6">PHP8のインストール</span></h2>



<p>Apache同様セキュリティ対策には触れていませんのでご注意ください。</p>



<p>まずremiリポジトリを追加します。</p>



<pre class="wp-block-code"><code>sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm</code></pre>



<p>デフォルトのバージョンがいくつか見てみます。</p>



<pre class="wp-block-code"><code>sudo dnf module list php</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="317" src="https://sandambara.com/wp-content/uploads/2022/11/026list-php-1024x317.png" alt="" class="wp-image-2180" srcset="https://sandambara.com/wp-content/uploads/2022/11/026list-php-1024x317.png 1024w, https://sandambara.com/wp-content/uploads/2022/11/026list-php-300x93.png 300w, https://sandambara.com/wp-content/uploads/2022/11/026list-php-768x238.png 768w, https://sandambara.com/wp-content/uploads/2022/11/026list-php.png 1426w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>PHPバージョン一覧</figcaption></figure>



<p>PHP8を入れられるようになりましたので進めます。DBアクセスにはPDOを使いたいので一緒に入れましょう。</p>



<pre class="wp-block-code"><code>sudo dnf module install php:8.0
sudo dnf install php-pdo php-pgsql</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="254" src="https://sandambara.com/wp-content/uploads/2022/11/030dnf-install-php-pdo-pgsql-complete-1024x254.png" alt="" class="wp-image-2181" srcset="https://sandambara.com/wp-content/uploads/2022/11/030dnf-install-php-pdo-pgsql-complete-1024x254.png 1024w, https://sandambara.com/wp-content/uploads/2022/11/030dnf-install-php-pdo-pgsql-complete-300x74.png 300w, https://sandambara.com/wp-content/uploads/2022/11/030dnf-install-php-pdo-pgsql-complete-768x191.png 768w, https://sandambara.com/wp-content/uploads/2022/11/030dnf-install-php-pdo-pgsql-complete.png 1132w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>PHP8が入りました</figcaption></figure>



<h2 class="wp-block-heading"><span id="toc7">動作テスト</span></h2>



<p>テストファイルを作ります。</p>



<pre class="wp-block-code"><code>sudo nano /var/www/html/index.php</code></pre>



<p>ここへ</p>



<pre class="wp-block-code"><code>&lt;?php
phpinfo();
</code></pre>



<p>Apacheを再起動してブラウザでlocalhost/index.phpへアクセスしてみましょう。</p>



<pre class="wp-block-code"><code>sudo systemctl restart httpd</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="201" src="https://sandambara.com/wp-content/uploads/2022/11/031done-1024x201.png" alt="" class="wp-image-2182" srcset="https://sandambara.com/wp-content/uploads/2022/11/031done-1024x201.png 1024w, https://sandambara.com/wp-content/uploads/2022/11/031done-300x59.png 300w, https://sandambara.com/wp-content/uploads/2022/11/031done-768x151.png 768w, https://sandambara.com/wp-content/uploads/2022/11/031done-1536x302.png 1536w, https://sandambara.com/wp-content/uploads/2022/11/031done-2048x403.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>DBに適当なテーブルを作ってPDOもぜひ試してみてください。最後までご覧くださって有難うございました！</p>The post <a href="https://sandambara.com/oraclelinux85-with-postgresql-apache-php-using-wsl2">WSL2でPostgreSQLとApacheとPHPを使えるようにする（OracleLinux8.5 systemd対策あり）</a> first appeared on <a href="https://sandambara.com">ITとガジェットあれこれ</a>.]]></content:encoded>
					
					<wfw:commentRss>https://sandambara.com/oraclelinux85-with-postgresql-apache-php-using-wsl2/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PostgreSQL小ネタ（西暦・和暦変換　税率変更などにも応用可！）</title>
		<link>https://sandambara.com/wareki-by-sql?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=wareki-by-sql</link>
					<comments>https://sandambara.com/wareki-by-sql#respond</comments>
		
		<dc:creator><![CDATA[sandambara]]></dc:creator>
		<pubDate>Sun, 13 Jun 2021 10:00:00 +0000</pubDate>
				<category><![CDATA[database]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[開発]]></category>
		<guid isPermaLink="false">https://sandambara.com/?p=1848</guid>

					<description><![CDATA[<p>久しぶりのDBネタです。 まだまだ「和暦表示は必須」という仕様も多いですよね。やり方は色々あると思いますが、なるべく分かりやすい方法で実現したいと思います。 「西暦のyyyyから和暦との年数差を引く」という考え方でマスタ [&#8230;]</p>
The post <a href="https://sandambara.com/wareki-by-sql">PostgreSQL小ネタ（西暦・和暦変換　税率変更などにも応用可！）</a> first appeared on <a href="https://sandambara.com">ITとガジェットあれこれ</a>.]]></description>
										<content:encoded><![CDATA[<p>久しぶりのDBネタです。</p>



<p>まだまだ「和暦表示は必須」という仕様も多いですよね。やり方は色々あると思いますが、なるべく分かりやすい方法で実現したいと思います。</p>



<pre class="wp-block-code"><code>【和暦管理テーブル】
create table warekimaster(
     id int not null          -- 主キー
    ,wareki text not null     -- 元号
    ,diff int not null        -- 西暦(yyyy)との年数差
    ,startymd date not null   -- その元号はいつから
    ,endymd date not null     -- いつまで
    ,constraint pk_warekimaster primary key(id));</code></pre>



<p>「西暦のyyyyから和暦との年数差を引く」という考え方でマスタを作ります。diff列（西暦(yyyy)と和暦の年数差）は無くても良いですが、あった方がSQLがスッキリします。</p>



<p>続いてデータ投入です。今回は昭和から令和までを変換対象とします。</p>



<pre class="wp-block-code"><code>insert into warekimaster(id, wareki, diff, startymd, endymd)
values(1, '昭和', 1925, '1926-12-25', '1989-1-7');

insert into warekimaster(id, wareki, diff, startymd, endymd)
values(2, '平成', 1988, '1989-1-8', '2019-4-30');

-- 令和のendymdは適当に入れておく
insert into warekimaster(id, wareki, diff, startymd, endymd)
values(3, '令和', 2018, '2019-5-1', '2099-12-31');

sandambara=&gt; select * from warekimaster order by id;
 id | wareki | diff |  startymd  |   endymd   
----+--------+------+------------+------------
  1 | 昭和   | 1925 | 1926-12-25 | 1989-01-07
  2 | 平成   | 1988 | 1989-01-08 | 2019-04-30
  3 | 令和   | 2018 | 2019-05-01 | 2099-12-31
(3 rows)</code></pre>



<p>例えば今日の日付を和暦に変換する場合はこうです。</p>



<pre class="wp-block-code"><code>select
    wareki || (to_char(now(), 'yyyy')::int - diff)::text || '年' || 
    to_char(now(), 'mm') || '月' || 
    to_char(now(), 'dd') || '日'
from
    warekimaster
where
    now() &gt;= startymd and now() &lt;= endymd;</code></pre>



<p>「1年」を「元年」と出力させるのはcaseを使えば良いですし、selectをまるっとfunctionにすればスマートですよね。折角なのでfunctionにしてみましょう！</p>



<pre class="wp-block-code"><code>create or replace function wareki(date) returns text as $$
declare
    returnstring text;
begin

    select
        case
            when to_char($1, 'yyyy')::int - diff = 1 then wareki || '元年'
            else wareki || (to_char($1, 'yyyy')::int - diff)::text || '年'
        end ||
        to_char($1, 'mm') || '月' ||
        to_char($1, 'dd') || '日'
    into
        returnstring
    from
        warekimaster
    where
        $1 &gt;= startymd and $1 &lt;= endymd;

    return returnstring;

end $$ language plpgsql;</code></pre>



<p>では、早速実行してみましょう。</p>



<pre class="wp-block-code"><code>sandambara=&gt; select wareki('2019-06-13');
      wareki      
------------------
 令和元年06月13日
(1 row)

sandambara=&gt; select wareki('2021-06-13');
     wareki      
-----------------
 令和3年06月13日
(1 row)</code></pre>



<p>この手法は例えば消費税率の切り替えなどにも応用できます。お役に立てば幸いです！</p>The post <a href="https://sandambara.com/wareki-by-sql">PostgreSQL小ネタ（西暦・和暦変換　税率変更などにも応用可！）</a> first appeared on <a href="https://sandambara.com">ITとガジェットあれこれ</a>.]]></content:encoded>
					
					<wfw:commentRss>https://sandambara.com/wareki-by-sql/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Oracle LinuxにOracle Database 18c Express Editionをインストールしてみた</title>
		<link>https://sandambara.com/oracle-database-18c-express-edition-on-oracle-linux?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=oracle-database-18c-express-edition-on-oracle-linux</link>
					<comments>https://sandambara.com/oracle-database-18c-express-edition-on-oracle-linux#respond</comments>
		
		<dc:creator><![CDATA[sandambara]]></dc:creator>
		<pubDate>Tue, 12 Jan 2021 06:00:04 +0000</pubDate>
				<category><![CDATA[database]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[開発]]></category>
		<guid isPermaLink="false">https://sandambara.com/?p=1581</guid>

					<description><![CDATA[<p>前々回の記事でOracle Linuxをインストールし、前回の記事でそこへPostgreSQLをインストールしNEC提供のOSSで暗号化してみました。 今回は折角なのでOracle Databaseもインストールしてみよ [&#8230;]</p>
The post <a href="https://sandambara.com/oracle-database-18c-express-edition-on-oracle-linux">Oracle LinuxにOracle Database 18c Express Editionをインストールしてみた</a> first appeared on <a href="https://sandambara.com">ITとガジェットあれこれ</a>.]]></description>
										<content:encoded><![CDATA[<p>前々回の記事でOracle Linuxをインストールし、前回の記事でそこへPostgreSQLをインストールしNEC提供のOSSで暗号化してみました。</p>



<figure class="wp-block-embed-wordpress wp-block-embed is-type-wp-embed is-provider-itとガジェットあれこれ"><div class="wp-block-embed__wrapper">

<a href="https://sandambara.com/install-oracle-linux" title="Oracle Linuxをインストールしてみた" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sandambara.com/wp-content/uploads/2021/01/OracleLinux-4-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sandambara.com/wp-content/uploads/2021/01/OracleLinux-4-160x90.png 160w, https://sandambara.com/wp-content/uploads/2021/01/OracleLinux-4-120x68.png 120w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Oracle Linuxをインストールしてみた</div><div class="blogcard-snippet internal-blogcard-snippet">新年あけましておめでとうございます。本年も不肖sandambaraをどうぞ宜しくお願い申し上げます。さて、2020年は色々あった年でしたが、師走にIT界隈へ衝撃をもたらすあるニュースが飛び込んできました。CentOS Project shi...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sandambara.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sandambara.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2021.01.04</div></div></div></div></a>
</div></figure>



<figure class="wp-block-embed-wordpress wp-block-embed is-type-wp-embed is-provider-itとガジェットあれこれ"><div class="wp-block-embed__wrapper">

<a href="https://sandambara.com/postgresql-on-oracle-linux" title="Oracle LinuxにPostgreSQLをインストールしてみた" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sandambara.com/wp-content/uploads/2021/01/image-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sandambara.com/wp-content/uploads/2021/01/image-160x90.png 160w, https://sandambara.com/wp-content/uploads/2021/01/image-120x68.png 120w, https://sandambara.com/wp-content/uploads/2021/01/image-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Oracle LinuxにPostgreSQLをインストールしてみた</div><div class="blogcard-snippet internal-blogcard-snippet">前回の記事でOracle Linuxの仮想マシンを作成しました。今日はそちらにPostgreSQLをインストールしてみようと思います。検証環境Debian10(buster)にインストールしたVirtual BoxへOracle Linux...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sandambara.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sandambara.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2021.01.08</div></div></div></div></a>
</div></figure>



<p>今回は折角なのでOracle Databaseもインストールしてみようと思います。エディションは無償で利用できるOracle Database 18c Express Edition（XE）です。</p>





<a rel="noopener" href="https://www.oracle.com/jp/database/technologies/appdev/xe.html" title="Oracle Database Express Edition | Oracle &#26085;&#26412;" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fwww.oracle.com%2Fjp%2Fdatabase%2Ftechnologies%2Fappdev%2Fxe.html?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Oracle Database Express Edition | Oracle &#26085;&#26412;</div><div class="blogcard-snippet external-blogcard-snippet">Oracle Database Express Edition（XE）は、世界をリードするデータベースを無償で開発、デプロイ、および配布できるエディションです。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.oracle.com/jp/database/technologies/appdev/xe.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.oracle.com</div></div></div></div></a>





  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-8" checked><label class="toc-title" for="toc-checkbox-8">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">検証環境</a></li><li><a href="#toc2" tabindex="0">Oracle Database本体のダウンロード</a></li><li><a href="#toc3" tabindex="0">preinstall用ファイルのダウンロード</a></li><li><a href="#toc4" tabindex="0">インストール開始</a></li><li><a href="#toc5" tabindex="0">Oracleの起動・停止</a></li><li><a href="#toc6" tabindex="0">PATHを通す</a></li><li><a href="#toc7" tabindex="0">DBにログインしてみる</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">検証環境</span></h2>



<p>Debian10上に構築したVirtual Boxの仮想マシン（Oracle Linux 7.9)へインストールします。</p>



<h2 class="wp-block-heading"><span id="toc2">Oracle Database本体のダウンロード</span></h2>



<p>手順はOracleのクイック・スタートにある通りですが、まずは媒体をダウンロードします。</p>





<a rel="noopener" href="https://www.oracle.com/jp/database/technologies/appdev/xe/quickstart.html" title="Oracle Database Express Edition&#12463;&#12452;&#12483;&#12463;&#12539;&#12473;&#12479;&#12540;&#12488; | Oracle &#26085;&#26412;" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fwww.oracle.com%2Fjp%2Fdatabase%2Ftechnologies%2Fappdev%2Fxe%2Fquickstart.html?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Oracle Database Express Edition&#12463;&#12452;&#12483;&#12463;&#12539;&#12473;&#12479;&#12540;&#12488; | Oracle &#26085;&#26412;</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.oracle.com/jp/database/technologies/appdev/xe/quickstart.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.oracle.com</div></div></div></div></a>




<p>コマンドはこちらです。</p>



<pre class="wp-block-code"><code>wget https://download.oracle.com/otn-pub/otn_software/db-express/oracle-database-xe-18c-1.0-1.x86_64.rpm</code></pre>



<h2 class="wp-block-heading"><span id="toc3">preinstall用ファイルのダウンロード</span></h2>



<p>preinstallってよく分からないですよね。Windowsでインストールするときの前提条件チェックのようなものでしょうか。</p>



<pre class="wp-block-code"><code>curl -o oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm</code></pre>



<h2 class="wp-block-heading"><span id="toc4">インストール開始</span></h2>



<p>では、インストール開始です。</p>



<pre class="wp-block-code"><code>yum -y localinstall oracle-database*18c*</code></pre>



<p>続いて実行するコマンドはこちらです。時間かかります。</p>



<pre class="wp-block-code"><code>/etc/init.d/oracle-xe-18c configure</code></pre>



<p>開始後直ぐにパスワードの設定が始まり、そのままセットアップが続きます。順調に終われば良いのですが私は謎エラーで死にました。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="662" height="157" src="https://sandambara.com/wp-content/uploads/2021/01/image-1.png" alt="" class="wp-image-1588" srcset="https://sandambara.com/wp-content/uploads/2021/01/image-1.png 662w, https://sandambara.com/wp-content/uploads/2021/01/image-1-300x71.png 300w" sizes="(max-width: 662px) 100vw, 662px" /></figure>



<p>「使おうとしたポート先に使ってる奴がおるからね」とのお叱りですが、lsofで調べても反応がありません。ググってみるとhostsに加筆する必要がありようで、加筆する内容はサーバーのIPアドレス、FQDN、ホスト名の3つです。</p>



<pre class="wp-block-code"><code>sudo nano /etc/hosts

【変更前】
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

【変更後】
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.0.1 srv005.sandambara.com srv005</code></pre>



<p>この後リトライします。</p>



<pre class="wp-block-code"><code>/etc/init.d/oracle-xe-18c configure</code></pre>



<p>今度は順調に進んでおります。仮想ディスクのせいか止まっているのかと思うほど遅かったです。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="765" height="842" src="https://sandambara.com/wp-content/uploads/2021/01/image-4.png" alt="" class="wp-image-1599" srcset="https://sandambara.com/wp-content/uploads/2021/01/image-4.png 765w, https://sandambara.com/wp-content/uploads/2021/01/image-4-273x300.png 273w" sizes="(max-width: 765px) 100vw, 765px" /></figure>



<h2 class="wp-block-heading"><span id="toc5">Oracleの起動・停止</span></h2>



<p>こちらが参考になります。</p>





<a rel="noopener" href="https://docs.oracle.com/cd/E96517_01/xeinl/starting-and-stopping-oracle-database.html" title="インストレーション・ガイド" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fdocs.oracle.com%2Fcd%2FE96517_01%2Fxeinl%2Fstarting-and-stopping-oracle-database.html?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">インストレーション・ガイド</div><div class="blogcard-snippet external-blogcard-snippet">データベースの起動および停止は、手動で行うか、システムの停止と起動後に自動的に行うように設定するか、またはEnterprise Managerを使用して行うように設定できます。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://docs.oracle.com/cd/E96517_01/xeinl/starting-and-stopping-oracle-database.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">docs.oracle.com</div></div></div></div></a>




<p>今回の検証環境はOracle Linux 7.9ですが、リンク先にあるsystemctlからはじまるコマンドではダメで、/etc/init.d/oracle-xe-18c start(stop・restart)が有効でした。知見が無く原因不明ですので、もしアドバイス頂けると大変有難いです。</p>



<h2 class="wp-block-heading"><span id="toc6">PATHを通す</span></h2>



<p>以下の情報を加筆します。</p>



<pre class="wp-block-code"><code>nano ~/.bash_profile

export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/18c/dbhomeXE
export NLS_LANG=Japanese_Japan.AL32UTF8

PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin

Ctrl+X → y → Enterで保存して終了

# 環境変数読みなおし
source ~/.bash_profile</code></pre>



<h2 class="wp-block-heading"><span id="toc7">DBにログインしてみる</span></h2>



<p>Oracle 12cから採用されているマルチテナント・アーキテクチャ。私は11gまでしか触ったことが無かったので初体験です。</p>



<pre class="wp-block-code"><code>CDB（DBのガワ？）にログインするとき
sqlplus sys/インストール時に入力したパスワード@//localhost:1521/XE as sysdba

PDB（DBそのもの）にログインするとき
sqlplus sys/インストール時に入力したパスワード@//localhost:1521/XEPDB1 as sysdba</code></pre>



<p>今回はダイレクトにPDBへログインしてみました。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="641" height="236" src="https://sandambara.com/wp-content/uploads/2021/01/image-5.png" alt="" class="wp-image-1600" srcset="https://sandambara.com/wp-content/uploads/2021/01/image-5.png 641w, https://sandambara.com/wp-content/uploads/2021/01/image-5-300x110.png 300w" sizes="(max-width: 641px) 100vw, 641px" /></figure>



<p>「orclとはいつの時代のパスワードだよ」って感じですよね（笑）とりあえずオラクルといえばこれです。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="229" height="111" src="https://sandambara.com/wp-content/uploads/2021/01/image-9.png" alt="" class="wp-image-1604"/></figure>



<p>以上です！</p>



<script type="text/javascript">amzn_assoc_ad_type ="responsive_search_widget"; amzn_assoc_tracking_id ="sandambara02-22"; amzn_assoc_marketplace ="amazon"; amzn_assoc_region ="JP"; amzn_assoc_placement =""; amzn_assoc_search_type = "search_widget";amzn_assoc_width ="auto"; amzn_assoc_height ="auto"; amzn_assoc_default_search_category =""; amzn_assoc_default_search_key ="Oracle";amzn_assoc_theme ="light"; amzn_assoc_bg_color ="FFFFFF"; </script><script src="//z-fe.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&amp;Operation=GetScript&amp;ID=OneJS&amp;WS=1&amp;Marketplace=JP"></script>The post <a href="https://sandambara.com/oracle-database-18c-express-edition-on-oracle-linux">Oracle LinuxにOracle Database 18c Express Editionをインストールしてみた</a> first appeared on <a href="https://sandambara.com">ITとガジェットあれこれ</a>.]]></content:encoded>
					
					<wfw:commentRss>https://sandambara.com/oracle-database-18c-express-edition-on-oracle-linux/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Oracle LinuxにPostgreSQLをインストールしてみた</title>
		<link>https://sandambara.com/postgresql-on-oracle-linux?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=postgresql-on-oracle-linux</link>
					<comments>https://sandambara.com/postgresql-on-oracle-linux#respond</comments>
		
		<dc:creator><![CDATA[sandambara]]></dc:creator>
		<pubDate>Fri, 08 Jan 2021 00:00:00 +0000</pubDate>
				<category><![CDATA[database]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[開発]]></category>
		<guid isPermaLink="false">https://sandambara.com/?p=1566</guid>

					<description><![CDATA[<p>前回の記事でOracle Linuxの仮想マシンを作成しました。今日はそちらにPostgreSQLをインストールしてみようと思います。 目次 検証環境Oracle Linuxを起動するPostgreSQLインストールまと [&#8230;]</p>
The post <a href="https://sandambara.com/postgresql-on-oracle-linux">Oracle LinuxにPostgreSQLをインストールしてみた</a> first appeared on <a href="https://sandambara.com">ITとガジェットあれこれ</a>.]]></description>
										<content:encoded><![CDATA[<p>前回の記事でOracle Linuxの仮想マシンを作成しました。今日はそちらにPostgreSQLをインストールしてみようと思います。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-10" checked><label class="toc-title" for="toc-checkbox-10">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">検証環境</a></li><li><a href="#toc2" tabindex="0">Oracle Linuxを起動する</a></li><li><a href="#toc3" tabindex="0">PostgreSQLインストール</a></li><li><a href="#toc4" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">検証環境</span></h2>



<p>Debian10(buster)にインストールしたVirtual BoxへOracle Linux 7.9の仮想マシンを作成しています。詳しくは前回の記事を参照してください。</p>



<figure class="wp-block-embed-wordpress wp-block-embed is-type-wp-embed is-provider-itとガジェットあれこれ"><div class="wp-block-embed__wrapper">

<a href="https://sandambara.com/install-oracle-linux" title="Oracle Linuxをインストールしてみた" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://sandambara.com/wp-content/uploads/2021/01/OracleLinux-4-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://sandambara.com/wp-content/uploads/2021/01/OracleLinux-4-160x90.png 160w, https://sandambara.com/wp-content/uploads/2021/01/OracleLinux-4-120x68.png 120w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Oracle Linuxをインストールしてみた</div><div class="blogcard-snippet internal-blogcard-snippet">新年あけましておめでとうございます。本年も不肖sandambaraをどうぞ宜しくお願い申し上げます。さて、2020年は色々あった年でしたが、師走にIT界隈へ衝撃をもたらすあるニュースが飛び込んできました。CentOS Project shi...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sandambara.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sandambara.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2021.01.04</div></div></div></div></a>
</div></figure>



<h2 class="wp-block-heading"><span id="toc2">Oracle Linuxを起動する</span></h2>



<p>CentOSを使っている方がOracle Linuxの起動画面を見ると、きっと「ああ、CentOSだ」と感じるでしょう。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="806" height="685" src="https://sandambara.com/wp-content/uploads/2021/01/image.png" alt="" class="wp-image-1567" srcset="https://sandambara.com/wp-content/uploads/2021/01/image.png 806w, https://sandambara.com/wp-content/uploads/2021/01/image-300x255.png 300w, https://sandambara.com/wp-content/uploads/2021/01/image-768x653.png 768w" sizes="(max-width: 806px) 100vw, 806px" /></figure>



<h2 class="wp-block-heading"><span id="toc3">PostgreSQLインストール</span></h2>



<p>こちらの記事のコマンドを総なめし、CentOSと同じようにハンドリングできることを確認します。</p>



<figure class="wp-block-embed-wordpress wp-block-embed is-type-wp-embed is-provider-itとガジェットあれこれ"><div class="wp-block-embed__wrapper">

<a href="https://sandambara.com/install-postgresql-with-sourcecode" title="コピペ対応！PostgreSQLをソースコードからインストールする" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="80" height="66" src="https://sandambara.com/wp-content/uploads/2020/05/5DAAAC95-7A4C-45C2-9ABC-C0E25CB98346.jpeg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">コピペ対応！PostgreSQLをソースコードからインストールする</div><div class="blogcard-snippet internal-blogcard-snippet">今日は私が愛用するデータベース、PostgreSQLをソースコードからインストールしていこうと思います。インストーラーがある時代になぜソースコードからと思われるかもしれませんが、makeしているときの画面がカッコイイからです（単純）注意事項...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sandambara.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sandambara.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.08.12</div></div></div></div></a>
</div></figure>


<p><script src="https://gist.github.com/sandambara/2198554ca2fd24ad9e91d58d240d7895.js"></script></p>



<p>全く問題なく起動しました。折角なのでこちらも試してみます。</p>



<figure class="wp-block-embed-wordpress wp-block-embed is-type-wp-embed is-provider-itとガジェットあれこれ"><div class="wp-block-embed__wrapper">

<a href="https://sandambara.com/install-tdeforpg-by-nec" title="コピペ対応！PostgreSQLを暗号化して安全に使う  NEC Transparent Data Encryption for PostgreSQL(OSS)" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="80" height="66" src="https://sandambara.com/wp-content/uploads/2020/05/5DAAAC95-7A4C-45C2-9ABC-C0E25CB98346.jpeg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">コピペ対応！PostgreSQLを暗号化して安全に使う  NEC Transparent Data Encryption for PostgreSQL(OSS)</div><div class="blogcard-snippet internal-blogcard-snippet">「データを安全に格納すること」はデータベースの使命の一つですが、「安全に」という言葉には二通りの意味があると思っています。一つは「データを壊さないこと」、もう一つは「セキュアにデータを保管すること」で、今回は後者に特化した内容の記事となりま...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://sandambara.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">sandambara.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.08.16</div></div></div></div></a>
</div></figure>



<script src="https://gist.github.com/sandambara/0beaf730b42d165afe30c818896f5220.js"></script>



<h2 class="wp-block-heading"><span id="toc4">まとめ</span></h2>



<p>CentOSで試したことは一通り同じように動作しました。CentOSの方針変更は個人的に残念に思いますが、結果として引き出しが増えたので一安心です！</p>



<script type="text/javascript">amzn_assoc_ad_type ="responsive_search_widget"; amzn_assoc_tracking_id ="sandambara02-22"; amzn_assoc_marketplace ="amazon"; amzn_assoc_region ="JP"; amzn_assoc_placement =""; amzn_assoc_search_type = "search_widget";amzn_assoc_width ="auto"; amzn_assoc_height ="auto"; amzn_assoc_default_search_category =""; amzn_assoc_default_search_key ="PostgreSQL";amzn_assoc_theme ="light"; amzn_assoc_bg_color ="FFFFFF"; </script><script src="//z-fe.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&amp;Operation=GetScript&amp;ID=OneJS&amp;WS=1&amp;Marketplace=JP"></script>The post <a href="https://sandambara.com/postgresql-on-oracle-linux">Oracle LinuxにPostgreSQLをインストールしてみた</a> first appeared on <a href="https://sandambara.com">ITとガジェットあれこれ</a>.]]></content:encoded>
					
					<wfw:commentRss>https://sandambara.com/postgresql-on-oracle-linux/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>コピペ対応！PostgreSQLを暗号化して安全に使う  NEC Transparent Data Encryption for PostgreSQL(OSS)</title>
		<link>https://sandambara.com/install-tdeforpg-by-nec?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=install-tdeforpg-by-nec</link>
					<comments>https://sandambara.com/install-tdeforpg-by-nec#respond</comments>
		
		<dc:creator><![CDATA[sandambara]]></dc:creator>
		<pubDate>Sun, 16 Aug 2020 05:28:39 +0000</pubDate>
				<category><![CDATA[database]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[開発]]></category>
		<guid isPermaLink="false">https://sandambara.com/?p=916</guid>

					<description><![CDATA[<p>「データを安全に格納すること」はデータベースの使命の一つですが、「安全に」という言葉には二通りの意味があると思っています。一つは「データを壊さないこと」、もう一つは「セキュアにデータを保管すること」で、今回は後者に特化し [&#8230;]</p>
The post <a href="https://sandambara.com/install-tdeforpg-by-nec">コピペ対応！PostgreSQLを暗号化して安全に使う  NEC Transparent Data Encryption for PostgreSQL(OSS)</a> first appeared on <a href="https://sandambara.com">ITとガジェットあれこれ</a>.]]></description>
										<content:encoded><![CDATA[<p>「データを安全に格納すること」はデータベースの使命の一つですが、「安全に」という言葉には二通りの意味があると思っています。一つは「データを壊さないこと」、もう一つは「セキュアにデータを保管すること」で、今回は後者に特化した内容の記事となります。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-12" checked><label class="toc-title" for="toc-checkbox-12">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">セキュアにデータを保管する</a></li><li><a href="#toc2" tabindex="0">透過的暗号化</a></li><li><a href="#toc3" tabindex="0">TDE for PG のシステム要件</a></li><li><a href="#toc4" tabindex="0">TDE for PG のダウンロード</a></li><li><a href="#toc5" tabindex="0">TDE for PG インストール</a></li><li><a href="#toc6" tabindex="0">環境変数設定</a></li><li><a href="#toc7" tabindex="0">pgcrypto のインストール</a></li><li><a href="#toc8" tabindex="0">リンク作成</a></li><li><a href="#toc9" tabindex="0">postgresql.conf 変更</a></li><li><a href="#toc10" tabindex="0">暗号化したいデータベースを作成する</a></li><li><a href="#toc11" tabindex="0">pgcrypto 作成</a></li><li><a href="#toc12" tabindex="0">TDE for PG のセットアップ</a></li><li><a href="#toc13" tabindex="0">TDE for PG の設定</a></li><li><a href="#toc14" tabindex="0">使ってみよう！ TDE for PG</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">セキュアにデータを保管する</span></h2>



<p>たとえばユーザーやロールでアクセス権限を管理することや、DBへの接続元を制限することも「セキュアにデータを保管する」ために用いられる手法です。しかし、これらだけでは万全と言えず、データあるいはデータベース自体を暗号化することも昨今珍しくはありません。</p>



<h2 class="wp-block-heading"><span id="toc2">透過的暗号化</span></h2>



<p>実はPostgreSQLにはpgcryptoという暗号化モジュールが提供されているのですが、これがあまり使い勝手がよくないのです。</p>



<pre class="wp-block-code"><code>--暗号化
pgp_sym_encrypt()

--復号
pgp_sym_decrypt()</code></pre>



<p>余談ですが「復号化」という言葉は誤りで、正しくは「復号」です。</p>



<p>pgcryptoは上記の関数を使ってSQL単位で暗号化・複合を行うため、アプリケーションの大幅な改修が必要になり、可読性も良くありません。これに対し「透過的暗号化」という手法は暗号化を特別意識することなくSQLを発行できるのがポイントで、暗号化の単位はデータベースとなります。</p>



<p>今回ご紹介するTransparent Data Encryption for PostgreSQL（以下、TDE for PG）はこの透過的暗号化機能を提供するものです。</p>




<a rel="noopener" href="https://jpn.nec.com/tdeforpg/index.html?" title="Transparent Data Encryption for PostgreSQL : PostgreSQL | NEC" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fjpn.nec.com%2Ftdeforpg%2Findex.html%3F?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Transparent Data Encryption for PostgreSQL : PostgreSQL | NEC</div><div class="blogcard-snippet external-blogcard-snippet">「Transparent Data Encryption for PostgreSQL」をご紹介します。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://jpn.nec.com/tdeforpg/index.html?" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">jpn.nec.com</div></div></div></div></a>



<p>サポート無しにはなりますが、有償版だけでなくOSSとして無償版を提供されたNECの決断には敬意と感謝しかありません。</p>



<h2 class="wp-block-heading"><span id="toc3">TDE for PG のシステム要件</span></h2>



<p>現在TDE for PG の最新バージョンはV1.2で、OSはRHEL系LinuxとWindowsに対応しています。</p>




<a rel="noopener" href="https://jpn.nec.com/tdeforpg/requirement.html?" title="Transparent Data Encryption for PostgreSQL : PostgreSQL | NEC" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fjpn.nec.com%2Ftdeforpg%2Frequirement.html%3F?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Transparent Data Encryption for PostgreSQL : PostgreSQL | NEC</div><div class="blogcard-snippet external-blogcard-snippet">「Transparent Data Encryption for PostgreSQL」をご紹介します。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://jpn.nec.com/tdeforpg/requirement.html?" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">jpn.nec.com</div></div></div></div></a>



<p><a href="https://sandambara.com/install-postgresql-with-sourcecode" target="_blank">前回の記事で</a>CentOS 8にインストールしたPostgreSQLのバージョンが10だった理由は、TDE for PG が11・12には未対応だからです。CentOSも正式に対応がアナウンスされているのは7系となります。</p>



<p>この辺りがサポートの無いものを自己責任で利用するリスクでもあるのですが、後続バージョンへの正式対応が強く望まれるところです！</p>



<h2 class="wp-block-heading"><span id="toc4">TDE for PG のダウンロード</span></h2>



<p>下準備は前回の記事で出来ていますので、TDE for PG をダウンロードしましょう。</p>



<pre class="wp-block-code"><code>wget https://github.com/nec-postgres/tdeforpg/releases/download/v1.2.1.0/tde_for_pg10-fe-1.2.1-0.el7.x86_64.rpm</code></pre>



<p>ホームディレクトリに保存されていることを確認します。</p>



<pre class="wp-block-code"><code>&#91;postgres@centos ~]$ ls -l
合計 24536
drwxrwxr-x. 7 postgres postgres     4096  8月 10 15:35 postgresql-10.13
-rw-rw-r--. 1 postgres postgres 24973924  5月 12 06:24 postgresql-10.13.tar.gz
-rw-rw-r--. 1 postgres postgres   142348  7月 11  2018 tde_for_pg10-fe-1.2.1-0.el7.x86_64.rpm</code></pre>



<h2 class="wp-block-heading"><span id="toc5">TDE for PG インストール</span></h2>



<pre class="wp-block-code"><code>sudo rpm -ivh tde_for_pg10-fe-1.2.1-0.el7.x86_64.rpm</code></pre>



<p>これは直ぐに終わります。</p>



<pre class="wp-block-code"><code>Verifying...                          ################################# &#91;100%]
準備しています...              ################################# &#91;100%]
更新中 / インストール中...
   1:tde_for_pg10-fe-1.2.1-0.el7      ################################# &#91;100%]
INFO: Transparent Data Encryption for PostgreSQL 10
      was installed successfully.
HINT: To complete validation of transparent data encryption feature,
      please refer to "/opt/nec/tdeforpg10-fe/INSTALL-NOTE.TXT"</code></pre>



<h2 class="wp-block-heading"><span id="toc6">環境変数設定</span></h2>



<p>TDE for PG の設定に必要な環境変数を設定します。ここを間違えると後の作業で必ず詰みますので慎重に行いましょう。</p>



<pre class="wp-block-code"><code>export PGHOME='/usr/local/pgsql'         # PostgreDQLインストールディレクトリ
export TDEHOME='/opt/nec/tdeforpg10-fe'  # TDE for PGインストールディレクトリ
export PGPORT='5432'                     # PostgreSQLの接続ポート
export PGDATA='/usr/local/pgsql/data'    # データベースクラスタ
export PGDATABASE='sandambara';          # TDE for PG を有効化したいデータベース
export PGPASSWORD='postgres'             # スーパーユーザーのパスワード</code></pre>



<h2 class="wp-block-heading"><span id="toc7">pgcrypto のインストール</span></h2>



<p>TDE for PG はpgcryptoを利用しています。前回の記事ではpgcryptoを仕込んでいませんのでここでインストールします。</p>



<pre class="wp-block-code"><code>sudo su -
cd /home/postgres/postgresql-10.13/contrib/pgcrypto
make &amp;&amp; make install
exit</code></pre>



<h2 class="wp-block-heading"><span id="toc8">リンク作成</span></h2>



<p>マニュアルに従いリンクを作成します。ここのパス記述を誤ると後の作業でエラーになる場合がありますので慎重に作業しましょう。</p>



<pre class="wp-block-code"><code>sudo ln -s $PGHOME/lib/pgcrypto.so /usr/lib64/libpgcrypto.so
sudo ln -s $TDEHOME/SOURCES/data_encryption/10/data_encryption10.so.1.2.1.0 /usr/lib64/data_encryption.so</code></pre>



<h2 class="wp-block-heading"><span id="toc9">postgresql.conf 変更</span></h2>



<p>DB起動時に読み込むライブラリを指定します。コメントを解除して下記のパスを記入してください。</p>



<pre class="wp-block-code"><code>nano $PGDATA/postgresql.conf

shared_preload_libraries = '/usr/local/pgsql/lib/pgcrypto.so'           # (change requires restart)</code></pre>



<p>保存して終了したらpostgresql.confを読み込ませるためにDBを再起動します。</p>



<pre class="wp-block-code"><code>pg_ctl restart</code></pre>



<p>正常にDBが起動しないときはpostgresql.confのshared_preload_librariesの値をもう一度見直しましょう。</p>



<h2 class="wp-block-heading"><span id="toc10">暗号化したいデータベースを作成する</span></h2>



<p>透過的暗号化はデータベース単位で暗号化を行いますので、ログインし暗号化したいデータベース（先ほど環境変数で指定したデータベース）を作成します。成功したら作成したデータベースへログインしましょう。</p>



<pre class="wp-block-code"><code>psql postgres postgres 

create database sandambara;
\c sandambara postgres</code></pre>



<h2 class="wp-block-heading"><span id="toc11">pgcrypto 作成</span></h2>



<p>作成したデータベースでpgcryptoを使えるようにします。</p>



<pre class="wp-block-code"><code>create extension pgcrypto;</code></pre>



<p>このようになっていればOKです。</p>



<pre class="wp-block-code"><code>select * from pg_available_extensions;


   name   | default_version | installed_version |           comment            
----------+-----------------+-------------------+------------------------------
 plpgsql  | 1.0             | 1.0               | PL/pgSQL procedural language
 pgcrypto | 1.3             | 1.3               | cryptographic functions
(2 rows)

-- 確認出来たらDBを抜けます
\q
</code></pre>



<h2 class="wp-block-heading"><span id="toc12">TDE for PG のセットアップ</span></h2>



<p>TDE for PG を有効化します。</p>



<pre class="wp-block-code"><code>cd $TDEHOME/SOURCES
sudo sh bin/cipher_setup.sh $PGHOME</code></pre>



<p>設定は対話形式で行います。</p>



<pre class="wp-block-code"><code>Transparent data encryption feature setup script
Please select from the setup menu below
Transparent data encryption feature setup menu
1: activate  the transparent data encryption feature
2: inactivate the transparent data encryption feature
select menu &#91;1 - 2] > 1
Please enter database server port to connect : 5432   # PostgreSQLの接続ポート
Please enter database user name to connect : postgres # スーパーユーザー 
Please enter password for authentication :            # スーパーユーザーのパスワード
Please enter database name to connect : sandambara    # TDE for PG を有効化したいデータベース
CREATE LANGUAGE</code></pre>



<p>TDE for PG が有効化されました。</p>



<h2 class="wp-block-heading"><span id="toc13">TDE for PG の設定</span></h2>



<p>有効化された TDE for PG の設定を行います。</p>



<pre class="wp-block-code"><code>sudo sh bin/cipher_key_regist.sh $PGHOME

=== Database connection information ===
Please enter database server port to connect : 5432    # PostgreSQLの接続ポート
Please enter database user name to connect : postgres  # スーパーユーザー
Please enter password for authentication :             # スーパーユーザーのパスワード
Please enter database name to connect : sandambara     # 対象のデータベース
=== Regist new cipher key ===
Please enter the new cipher key :                      # 暗号鍵
Please retype the new cipher key :                     # 暗号鍵再入力
Please enter the algorithm for new cipher key : aes    # 暗号化方式

Are you sure to register new cipher key(y/n) : y       # 確認
</code></pre>



<p>暗号化アルゴリズムと暗号鍵の強度については<a rel="noopener" href="https://jpn.nec.com/tdeforpg/download/transparent_data_encryption.pdf" target="_blank">マニュアルp.6</a>にある通り、aes-16,24,32byteとblowfish56byteから選べます。</p>



<p>強度が上がればパフォーマンスがトレードオフとなりますので、お使いの環境や実現したい環境に応じて適切なものを選んでください。</p>



<p>設定作業は以上です。</p>



<h2 class="wp-block-heading"><span id="toc14">使ってみよう！ TDE for PG</span></h2>



<p>それでは早速使ってみましょう！テスト用のテーブルを作ります。</p>



<p><span class="marker-red"><span class="bold">追記　TDE for PG有効化後はログイン時に「&#8211;no-readline」を付けてください。付与せずログインすると.psql_historyに認証情報がプレーンテキストで残ってしまいます。</span></span></p>



<pre class="wp-block-code"><code>-- データベース sandambara にユーザー postgres でログインする
psql sandambara postgres --no-readline

-- テスト用にテーブルを作る
sandambara=# create table test(logtext encrypt_text);
CREATE TABLE

-- データを入れてみる
insert into test(logtext) values('hoge');
ERROR:  TDE-E0016 could not encrypt data, because key was not set&#91;01]
LINE 1: insert into test(logtext) values('hoge');
</code></pre>



<p>怒られました。暗号化列となるlogtext（encrypt_text型）に値を入れようとしたのですが鍵が無いと言われています。TDE for PG Free Editionでは暗号化したい列のデータ型にencrypt_textもしくはencrypt_byteaを指定できます。ちなみに有償版ではこれらに加えて下記の3つが利用可能です。</p>



<ul class="wp-block-list"><li>encrypt_numeric</li><li>encrypt_integer</li><li>encrypt_timestamp</li></ul>



<p>会計情報などを格納するデータベースではかなり魅力的ですね。</p>



<p>では、鍵を入力して再挑戦です。</p>



<pre class="wp-block-code"><code>sandambara=# select cipher_key_disable_log();
 cipher_key_disable_log 
------------------------
 t
(1 row)

sandambara=# select pgtde_begin_session('暗号鍵');
 pgtde_begin_session 
---------------------
 t
(1 row)

sandambara=# select cipher_key_enable_log();
 cipher_key_enable_log 
-----------------------
 t
(1 row)

insert into test(logtext) values('hoge');
INSERT 0 1

sandambara=# select * from test;
 logtext 
---------
 hoge
(1 row)</code></pre>



<ul class="wp-block-list"><li>cipher_key_disable_log()　　　でログ出力を無効化</li><li>pgtde_begin_session(&#8216;暗号鍵&#8217;) で暗号鍵を入力</li><li>cipher_key_enable_log()　　　でログ出力を有効に戻す</li><li>SQL実行</li></ul>



<p>このような流れになっており、いずれのコマンドも省略することはできません。</p>



<p>作業が終わってDBを抜けるときは</p>



<pre class="wp-block-code"><code>select pgtde_end_session();</code></pre>



<p>このようになります。</p>



<pre class="wp-block-code"><code>sandambara=# select pgtde_end_session();
 pgtde_end_session 
-------------------
 t
(1 row)</code></pre>



<p>暗号化セッションを抜けると再度アクセスするにはcipher_key_disable_log()からやり直しが必要です。試してみましょう。</p>



<pre class="wp-block-code"><code>sandambara=# select * from test;
ERROR:  TDE-E0017 could not decrypt data, because key was not set&#91;01]</code></pre>



<p>暗号鍵が無いため中身を見ることができなくなっていますね。</p>



<p>ちなみに encrypt_*** 以外のデータ型列には従来通り何をせずともそのままアクセスが可能ですし、平文で保存されている列をalter tableでencrypt_textに変換することも（その逆も）可能です。</p>



<p>注意点は大量にデータ型変換を行うと作業中はDBのパフォーマンスが低下すること、archive_mode = on の場合は大量にwalのアーカイブが生成されることの2点です。作業のタイミングやストレージの残量には気を付けておきましょう。</p>



<p>今回の記事では暗号化がどのようなものか身をもってご経験頂けたのではないでしょうか？とても安心感を得られますよね。</p>



<p>マニュアルにも記載されていますが「鍵をどのように管理するか」は慎重に検討が必要ですし、DBが暗号化されても「クライアント～サーバー間の通信が平文のまま」では大きなリスクとなります。セキュリティーの問題は落としどころが難しいと思いますが、少しでも「安全・安心」に近寄れるようにしたいものです。</p>



<p>NECさま、後続バージョンへの対応、どうかよろしくお願い致します！</p>



<script type="text/javascript">amzn_assoc_ad_type ="responsive_search_widget"; amzn_assoc_tracking_id ="sandambara02-22"; amzn_assoc_marketplace ="amazon"; amzn_assoc_region ="JP"; amzn_assoc_placement =""; amzn_assoc_search_type = "search_widget";amzn_assoc_width ="auto"; amzn_assoc_height ="auto"; amzn_assoc_default_search_category =""; amzn_assoc_default_search_key ="PostgreSQL";amzn_assoc_theme ="light"; amzn_assoc_bg_color ="FFFFFF"; </script><script src="//z-fe.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&amp;Operation=GetScript&amp;ID=OneJS&amp;WS=1&amp;Marketplace=JP"></script>The post <a href="https://sandambara.com/install-tdeforpg-by-nec">コピペ対応！PostgreSQLを暗号化して安全に使う  NEC Transparent Data Encryption for PostgreSQL(OSS)</a> first appeared on <a href="https://sandambara.com">ITとガジェットあれこれ</a>.]]></content:encoded>
					
					<wfw:commentRss>https://sandambara.com/install-tdeforpg-by-nec/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>コピペ対応！PostgreSQLをソースコードからインストールする</title>
		<link>https://sandambara.com/install-postgresql-with-sourcecode?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=install-postgresql-with-sourcecode</link>
					<comments>https://sandambara.com/install-postgresql-with-sourcecode#respond</comments>
		
		<dc:creator><![CDATA[sandambara]]></dc:creator>
		<pubDate>Wed, 12 Aug 2020 05:27:46 +0000</pubDate>
				<category><![CDATA[database]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[開発]]></category>
		<guid isPermaLink="false">https://sandambara.com/?p=879</guid>

					<description><![CDATA[<p>今日は私が愛用するデータベース、PostgreSQLをソースコードからインストールしていこうと思います。インストーラーがある時代になぜソースコードからと思われるかもしれませんが、makeしているときの画面がカッコイイから [&#8230;]</p>
The post <a href="https://sandambara.com/install-postgresql-with-sourcecode">コピペ対応！PostgreSQLをソースコードからインストールする</a> first appeared on <a href="https://sandambara.com">ITとガジェットあれこれ</a>.]]></description>
										<content:encoded><![CDATA[<p>今日は私が愛用するデータベース、PostgreSQLをソースコードからインストールしていこうと思います。インストーラーがある時代になぜソースコードからと思われるかもしれませんが、makeしているときの画面がカッコイイからです（単純）</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-14" checked><label class="toc-title" for="toc-checkbox-14">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">注意事項</a></li><li><a href="#toc2" tabindex="0">CentOSを準備する</a></li><li><a href="#toc3" tabindex="0">OSのアップデートと下準備</a></li><li><a href="#toc4" tabindex="0">ソースコードのダウンロード→解凍</a></li><li><a href="#toc5" tabindex="0">configureからinstallまで</a></li><li><a href="#toc6" tabindex="0">必要なディレクトリの作成</a></li><li><a href="#toc7" tabindex="0">データベースクラスタ初期化</a></li><li><a href="#toc8" tabindex="0">環境変数設定</a></li><li><a href="#toc9" tabindex="0">postgresql.confの編集</a></li><li><a href="#toc10" tabindex="0">pg_hba.confの編集</a></li><li><a href="#toc11" tabindex="0">DB起動</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">注意事項</span></h2>



<p>以下、完全に自己流ですので、参照される際は自己責任でお願い致します。また、誤り・思い違いと思われる点はご指摘頂けると嬉しいです。</p>



<h2 class="wp-block-heading"><span id="toc2">CentOSを準備する</span></h2>



<p>実環境を使うのはなにかと大変なので、今回私はVirtualBoxを利用しCentOS8の仮想マシンを準備しました。インストールに利用したイメージはCentOS-8.2.2004-x86_64-dvd1.isoです。</p>



<p>インストーラーではminimalインストールを選択し、ネットワーク設定を済ませておきます。インストールが始まったらユーザーpostgresを作成し「管理者にする」を選択しておきましょう。</p>



<h2 class="wp-block-heading"><span id="toc3">OSのアップデートと下準備</span></h2>



<p>インストールが終わりユーザーpostgresでログインしたら、私はいつも一番にエディタ「nano」をインストールします。クセが無く使いやすいと思いますので、使ったことが無い方は是非試してみてください。</p>



<pre class="wp-block-code"><code>sudo yum -y install nano</code></pre>



<p>次にシステム時刻を同期できるように仕込みます。これをやらずにVirtualBoxでスナップショットから仮想マシンを復元すると、システム時刻がスナップショット作成時まで戻ってしまうので注意が必要です。</p>



<pre class="wp-block-code"><code>sudo yum -y install chrony</code></pre>



<p>CentOS8ではntpdがサポートされなくなりました。chronyがインストール出来たら/etc/chrony.confを修正します。</p>



<pre class="wp-block-code"><code>sudo nano /etc/chrony.conf

#下記をコメントアウト
#pool 2.centos.pool.ntp.org iburst

#これを加筆
pool ntp.nict.jp iburst

#自環境に合わせ外へ出られるネットワークを指定
#allow 192.168.0.0/16
allow 192.168.0.0/24</code></pre>



<p>ここまで出来たらchronyを再起動します。</p>



<pre class="wp-block-code"><code>sudo systemctl enable --now chronyd</code></pre>



<p>続いてシステムをアップデートします。</p>



<pre class="wp-block-code"><code>sudo yum -y update</code></pre>



<p>次に以降の作業で必要になるものをインストールしていきます。</p>



<pre class="wp-block-code"><code>sudo yum -y install gcc
sudo yum -y install bison
sudo yum -y install zlib zlib-devel
sudo yum -y install readline-devel
sudo yum -y install make
sudo yum -y install openssl-devel
sudo yum -y install wget
sudo yum -y install tar</code></pre>



<h2 class="wp-block-heading"><span id="toc4">ソースコードのダウンロード→解凍</span></h2>



<p>PostgreSQLのソースコードをダウンロードします。今回入手するのはPostgreSQL10.13です。なぜ11でも12でもないのかは次回の記事でお話しします。</p>



<pre class="wp-block-code"><code>wget https://ftp.postgresql.org/pub/source/v10.13/postgresql-10.13.tar.gz</code></pre>



<p>ホームディレクトリに保存されているはずですので確認しましょう。こんな感じです。</p>



<pre class="wp-block-code"><code>ls
postgresql-10.13.tar.gz</code></pre>



<p>ダウンロードしたファイルを解凍します。</p>



<pre class="wp-block-code"><code>tar zxvf postgresql-10.13.tar.gz</code></pre>



<h2 class="wp-block-heading"><span id="toc5">configureからinstallまで</span></h2>



<p>では、一気に参りましょう。一気にといってもコマンドの実行は一つずつでお願います！</p>



<pre class="wp-block-code"><code>cd postgresql-10.13

./configure --with-openssl

make

make check

sudo make install</code></pre>



<p>見どころは何といってもmakeとmake checkの実行中です。じゃんじゃんコンソールが流れていく様をたっぷり堪能してください！</p>



<h2 class="wp-block-heading"><span id="toc6">必要なディレクトリの作成</span></h2>



<pre class="wp-block-code"><code>#データベースクラスタ
sudo mkdir /usr/local/pgsql/data

#walアーカイブ先
sudo mkdir /usr/local/pgsql/archivelogs

#それぞれユーザーpostgresに所有権を与えます
sudo chown postgres:postgres /usr/local/pgsql/data
sudo chown postgres:postgres /usr/local/pgsql/archivelogs</code></pre>



<h2 class="wp-block-heading"><span id="toc7">データベースクラスタ初期化</span></h2>



<pre class="wp-block-code"><code>/usr/local/pgsql/bin/initdb --no-locale --encoding=utf-8 -D /usr/local/pgsql/data</code></pre>



<p>フルパスで記述し実行します。</p>



<pre class="wp-block-code"><code>--no-locale</code></pre>



<p>こちらはデータベースの照合（ソート）順序で、この場合は文字コード順でのソートを指定しています。-Dでデータベースクラスタに先ほど作成したディレクトリを指定しています。</p>



<p>次にログの保存場所を作成します。ここでいうログはトランザクションログ（wal）ではなく、一般的ないわゆるアプリケーションのログです。</p>



<pre class="wp-block-code"><code>sudo mkdir /usr/local/pgsql/data/log
sudo chown postgres:postgres /usr/local/pgsql/data/log</code></pre>



<p>オンラインバックアップ作成時の手数が少なくなるので私はデータベースクラスタ内にログを保存するのですが、initdbを実行する時はデータベースクラスタに指定したディレクトリがカラである必要があるため、initdb実行後にこの作業を行います。</p>



<h2 class="wp-block-heading"><span id="toc8">環境変数設定</span></h2>



<p>特にコメントの必要はありませんね。</p>



<pre class="wp-block-code"><code>nano ~postgres/.bash_profile

#以下を加筆します
export PATH=/usr/local/pgsql/bin:$PATH
export MANPATH=/usr/local/pgsql/share/man:$PATH
export LD_LIBRARY_PATH=/usr/local/pgsql/lib:$LD_LIBRARY_PATH
export PGDATA=/usr/local/pgsql/data</code></pre>



<p>保存してエディタを抜けたらこちらをお忘れなく！</p>



<pre class="wp-block-code"><code>source ~postgres/.bash_profile</code></pre>



<h2 class="wp-block-heading"><span id="toc9">postgresql.confの編集</span></h2>



<p>archive_modeをonにして稼働させるのに必要な最小限の設定です。メモリ使用量の指定などはここでは触れません。元々行頭が#になっている項目は#を削除しアンコメントします。</p>



<pre class="wp-block-code"><code>nano $PGDATA/postgresql.conf

listen_addresses = '*'                  # アスタリスクに変更
archive_mode = on                       # onに変更
archive_command = 'cp %p /usr/local/pgsql/archivelogs/%f'     # アーカイブログ保存先を指定
log_destination = 'stderr'              # 標準エラー出力
logging_collector = on                  # onに変更
log_directory = '/usr/local/pgsql/data/log'                   # ログ保存先を指定</code></pre>



<h2 class="wp-block-heading"><span id="toc10">pg_hba.confの編集</span></h2>



<p>DBに接続するホスト、認証方式を指定します。ご自身の環境に合わせて編集しましょう。下記の例ではIPv4とIPv6の認証をtrustからmd5に変更しています。</p>



<pre class="wp-block-code"><code>nano $PGDATA/pg_hba.conf

-------------------------------------------------------------------------------------
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all             all             192.168.0.0/24          md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust
-------------------------------------------------------------------------------------
</code></pre>



<h2 class="wp-block-heading"><span id="toc11">DB起動</span></h2>



<pre class="wp-block-code"><code>pg_ctl start</code></pre>



<p>正常に起動しエラーが無いことを確認します。起動できな買った場合はpostgresql.confとpg_hba.confの内容をもう一度見直してみましょう。</p>



<p>ログの内容も確認します。</p>



<pre class="wp-block-code"><code>ls -l $PGDATA/log</code></pre>



<p>ここにpostgresql-yyyy-mm-dd_hh24miss.logというファイルが生成されていますので、その中を確認します。</p>



<pre class="wp-block-code"><code>cat $PGDATA/log/postgresql-yyyy-mm-dd_hh24miss.log</code></pre>



<p>もしログ自体が存在しないときはpostgresql.confで指定したlog_directoryの内容を確認します。</p>



<p>DBが起動できたらスーパーユーザーのパスワードを設定しましょう。</p>



<pre class="wp-block-code"><code>psql postgres postgres
alter user postgres password'hoge';
\q</code></pre>



<p>続いて再度pg_hba.confを編集し、先ほどtrustのままにしておいたlocalもmd5に変更します。</p>



<pre class="wp-block-code"><code>nano $PGDATA/pg_hba.conf

# "local" is for Unix domain socket connections only
local   all             all                                     md5</code></pre>



<p>保存してエディタを終了したらDBを再起動し.confをもう一度読み込ませます。</p>



<pre class="wp-block-code"><code>pg_ctl restart</code></pre>



<p>これでパスワード無しでDBに入ることは出来なくなりました。試してみましょう。</p>



<pre class="wp-block-code"><code>psql postgres postgres</code></pre>



<p>いかがだったでしょうか。同じ結果が得られるのであれば簡単な方が良いことも多いですが、「ならでは」の満足感が得られることと思います。皆さんも是非挑戦してみてください！</p>



<script type="text/javascript">amzn_assoc_ad_type ="responsive_search_widget"; amzn_assoc_tracking_id ="sandambara02-22"; amzn_assoc_marketplace ="amazon"; amzn_assoc_region ="JP"; amzn_assoc_placement =""; amzn_assoc_search_type = "search_widget";amzn_assoc_width ="auto"; amzn_assoc_height ="auto"; amzn_assoc_default_search_category =""; amzn_assoc_default_search_key ="PostgreSQL";amzn_assoc_theme ="light"; amzn_assoc_bg_color ="FFFFFF"; </script><script src="//z-fe.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&amp;Operation=GetScript&amp;ID=OneJS&amp;WS=1&amp;Marketplace=JP"></script>



<p></p>The post <a href="https://sandambara.com/install-postgresql-with-sourcecode">コピペ対応！PostgreSQLをソースコードからインストールする</a> first appeared on <a href="https://sandambara.com">ITとガジェットあれこれ</a>.]]></content:encoded>
					
					<wfw:commentRss>https://sandambara.com/install-postgresql-with-sourcecode/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PostgreSQL小ネタ（Oracleの関数　add_months）</title>
		<link>https://sandambara.com/https-sandambara-com-tips-postgresql-function-add-months?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=https-sandambara-com-tips-postgresql-function-add-months</link>
					<comments>https://sandambara.com/https-sandambara-com-tips-postgresql-function-add-months#respond</comments>
		
		<dc:creator><![CDATA[sandambara]]></dc:creator>
		<pubDate>Tue, 14 Jul 2020 13:41:07 +0000</pubDate>
				<category><![CDATA[database]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Windows]]></category>
		<guid isPermaLink="false">https://sandambara.com/?p=704</guid>

					<description><![CDATA[<p>目次 今回はadd_monthsを自作しますPostgreSQLで月を加減するには？add_monthsを作ってみる 今回はadd_monthsを自作します 前回の記事でOracleにあってPostgreSQLに無い関数 [&#8230;]</p>
The post <a href="https://sandambara.com/https-sandambara-com-tips-postgresql-function-add-months">PostgreSQL小ネタ（Oracleの関数　add_months）</a> first appeared on <a href="https://sandambara.com">ITとガジェットあれこれ</a>.]]></description>
										<content:encoded><![CDATA[<div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-16" checked><label class="toc-title" for="toc-checkbox-16">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">今回はadd_monthsを自作します</a></li><li><a href="#toc2" tabindex="0">PostgreSQLで月を加減するには？</a></li><li><a href="#toc3" tabindex="0">add_monthsを作ってみる</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">今回はadd_monthsを自作します</span></h2>



<p>前回の記事でOracleにあってPostgreSQLに無い関数「last_day」をファンクションで作成しました。今回は月の加減に利用する「add_months」を作ってみたいと思います。</p>



<h2 class="wp-block-heading"><span id="toc2">PostgreSQLで月を加減するには？</span></h2>



<p>PostgreSQLには「interval」という、月だけでなく年・日の加減にも利用できる関数があります。</p>



<pre class="wp-block-code"><code>今日の1年後
select now()::date + interval '1year';
今日の1か月後
select now()::date + interval '1month';
明日
select now()::date + interval '1day';</code></pre>



<p>これはこれで慣れるとどうということ無いのですが、DB移行案件や「使い慣れた関数はそのまま使いたい」という状況もあります。海外旅行に醤油を持参するのと同じです（謎）</p>



<h2 class="wp-block-heading"><span id="toc3">add_monthsを作ってみる</span></h2>



<p>それでは早速作ってみましょう！</p>



<pre class="wp-block-code"><code>create or replace function add_months(in date, in int) returns date as $$

	select ($1 + ($2::text || ' month')::interval)::date;

$$ language sql;</code></pre>



<p>非常にシンプルですね。</p>



<pre class="wp-block-code"><code>sandambara=# create or replace function add_months(in date, in int) returns date as $$
sandambara$#
sandambara$#         select ($1 + ($2::text || ' month')::interval)::date;
sandambara$#
sandambara$# $$ language sql;
CREATE FUNCTION</code></pre>



<p>使ってみます。</p>



<pre class="wp-block-code"><code>sandambara=# select add_months('2020-07-14', 1);
 add_months
------------
 2020-08-14
(1 row)

sandambara=# select add_months('2020-07-14', -1);
 add_months
------------
 2020-06-14
(1 row)</code></pre>



<p>月末日付に対して加減を行うときは戻り値も月末日付になります。</p>



<pre class="wp-block-code"><code>sandambara=# select add_months('2020-01-31', 1);
 add_months
------------
 2020-02-29
(1 row)</code></pre>



<p>このファンクションのポイントはintervalの使い方です。日頃SQLでintervalを使っていると「interval $2::text || &#8216;month&#8217;」とか「$1 + (interval &#8216;$2 month&#8217;)」と書きたくなりますが、前者はsyntaxエラーで後者は誤演算となります。</p>



<pre class="wp-block-code"><code>sandambara=# -- これはおこられる
sandambara=# create or replace function add_months(in date, in int) returns date as $$
sandambara$#
sandambara$#         select ($1 + (interval $2::text || 'month'))::date;
sandambara$#
sandambara$# $$ language sql;
ERROR:  syntax error at or near "$2"
LINE 3:  select ($1 + (interval $2::text || 'month'))::date;
                                ^

sandambara=# -- これは常に2か月プラスされる
sandambara=# create or replace function add_months(in date, in int) returns date as $$
sandambara$#
sandambara$#         select ($1 + (interval '$2 month'))::date;
sandambara$#
sandambara$# $$ language sql;
CREATE FUNCTION

sandambara=# select add_months('2020-07-14', 1);
 add_months
------------
 2020-09-14
(1 row)

sandambara=# select add_months('2020-07-14', -1);
 add_months
------------
 2020-09-14
(1 row)</code></pre>



<p>Oracle移行組の方、是非お試しください！</p>



<script type="text/javascript">amzn_assoc_ad_type ="responsive_search_widget"; amzn_assoc_tracking_id ="sandambara02-22"; amzn_assoc_marketplace ="amazon"; amzn_assoc_region ="JP"; amzn_assoc_placement =""; amzn_assoc_search_type = "search_widget";amzn_assoc_width ="auto"; amzn_assoc_height ="auto"; amzn_assoc_default_search_category =""; amzn_assoc_default_search_key ="PostgreSQL";amzn_assoc_theme ="light"; amzn_assoc_bg_color ="FFFFFF"; </script><script src="//z-fe.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&amp;Operation=GetScript&amp;ID=OneJS&amp;WS=1&amp;Marketplace=JP"></script>The post <a href="https://sandambara.com/https-sandambara-com-tips-postgresql-function-add-months">PostgreSQL小ネタ（Oracleの関数　add_months）</a> first appeared on <a href="https://sandambara.com">ITとガジェットあれこれ</a>.]]></content:encoded>
					
					<wfw:commentRss>https://sandambara.com/https-sandambara-com-tips-postgresql-function-add-months/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PostgreSQL小ネタ（Oracleの関数　last_day）</title>
		<link>https://sandambara.com/tips-postgresql-function-last-day?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=tips-postgresql-function-last-day</link>
					<comments>https://sandambara.com/tips-postgresql-function-last-day#respond</comments>
		
		<dc:creator><![CDATA[sandambara]]></dc:creator>
		<pubDate>Sun, 12 Jul 2020 09:40:39 +0000</pubDate>
				<category><![CDATA[database]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[開発]]></category>
		<guid isPermaLink="false">https://sandambara.com/?p=672</guid>

					<description><![CDATA[<p>目次 OracleからPostgreSQLに移行を決めたときlast_dayが無いなら作ってしまおうファンクション作成 OracleからPostgreSQLに移行を決めたとき 私は元々Oracleを触っていたのですが、P [&#8230;]</p>
The post <a href="https://sandambara.com/tips-postgresql-function-last-day">PostgreSQL小ネタ（Oracleの関数　last_day）</a> first appeared on <a href="https://sandambara.com">ITとガジェットあれこれ</a>.]]></description>
										<content:encoded><![CDATA[<div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-18" checked><label class="toc-title" for="toc-checkbox-18">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">OracleからPostgreSQLに移行を決めたとき</a></li><li><a href="#toc2" tabindex="0">last_dayが無いなら作ってしまおう</a></li><li><a href="#toc3" tabindex="0">ファンクション作成</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">OracleからPostgreSQLに移行を決めたとき</span></h2>



<p>私は元々Oracleを触っていたのですが、PostgreSQLに移行を検討したとき、同じRDBMSとはいえ「方言の違い」に悩まされました。例えば現在時刻を取得するにしても</p>



<pre class="wp-block-code"><code>Oracle
SELECT SYSDATE FROM DUAL;</code></pre>



<p>に対し</p>



<pre class="wp-block-code"><code>PostgreSQL
SELECT now();</code></pre>



<p>このように使用する関数が異なる場合があるからです（それよりFROM句が無くても良いことが衝撃でした）。</p>



<h2 class="wp-block-heading"><span id="toc2">last_dayが無いなら作ってしまおう</span></h2>



<p>しかし、これはSYSDATEをnow()に変えれば実現できますが「そもそもそんなものは無い」という関数も存在しました。その中で私が良く使っていたものの一つに「last_day」があります。いわずと知れた「その月の最終日を取得する」ための関数です。</p>



<p>PostgreSQLにも日付を操作する関数は勿論ありますが、こんなときはファンクションを自前で作成してしまえば良いと思います。DB丸ごと移行するとなれば、僅かな違いでも要修正箇所が膨大な量になるからです。</p>



<p>余談ですがPostgreSQLでOracleのストアドプロシージャにあたるものはファンクションになり、必ず戻り値を付けねばなりません（戻り値不要のファンクションではreturns voidとなります）。</p>



<h2 class="wp-block-heading"><span id="toc3">ファンクション作成</span></h2>



<pre class="wp-block-code"><code>create or replace function last_day(in date) returns date as $$
	select (((to_char(($1 + interval '1month'), 'yyyy-mm')) || '-01')::date - interval '1day')::date;
$$ language sql;</code></pre>



<p>やっていることは簡単です。月末を求めたい日付を引数で渡し、1か月加算してyyyy-mmの文字列にした後&#8217;-01&#8217;を付与。日付に戻して1日引いたものを返却します。2020年7月12日を引数で渡した場合はこんな感じです。</p>



<pre class="wp-block-code"><code>2020-07-12（引数）
2020-08-12（1か月足す）
2020-08   （yyyy-mmの文字列にする）
2020-08-01（-01を付与して日付に戻す）
2020-07-31（1日引いた値が戻り値）</code></pre>



<p>実行してみます。</p>



<pre class="wp-block-code"><code>sandambara=# select last_day('2020-07-12');
  last_day
------------
 2020-07-31
(1 行)</code></pre>



<p>ストアドやファンクションはドカッとまとまった処理をやらせるだけでなく、こんな風に「あったらいいな」を叶えてくれる便利な機能です。無い機能に落胆せず、あなたの色に染めていきましょう！</p>



<script type="text/javascript">amzn_assoc_ad_type ="responsive_search_widget"; amzn_assoc_tracking_id ="sandambara02-22"; amzn_assoc_marketplace ="amazon"; amzn_assoc_region ="JP"; amzn_assoc_placement =""; amzn_assoc_search_type = "search_widget";amzn_assoc_width ="auto"; amzn_assoc_height ="auto"; amzn_assoc_default_search_category =""; amzn_assoc_default_search_key ="PostgreSQL";amzn_assoc_theme ="light"; amzn_assoc_bg_color ="FFFFFF"; </script><script src="//z-fe.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&amp;Operation=GetScript&amp;ID=OneJS&amp;WS=1&amp;Marketplace=JP"></script>The post <a href="https://sandambara.com/tips-postgresql-function-last-day">PostgreSQL小ネタ（Oracleの関数　last_day）</a> first appeared on <a href="https://sandambara.com">ITとガジェットあれこれ</a>.]]></content:encoded>
					
					<wfw:commentRss>https://sandambara.com/tips-postgresql-function-last-day/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PostgreSQL小ネタ（一発INSERT）</title>
		<link>https://sandambara.com/tips-postgresql-multi-insert?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=tips-postgresql-multi-insert</link>
					<comments>https://sandambara.com/tips-postgresql-multi-insert#respond</comments>
		
		<dc:creator><![CDATA[sandambara]]></dc:creator>
		<pubDate>Tue, 07 Jul 2020 05:37:46 +0000</pubDate>
				<category><![CDATA[database]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[開発]]></category>
		<guid isPermaLink="false">https://sandambara.com/?p=608</guid>

					<description><![CDATA[<p>昨日の記事を公開した後で思い出したtipsです。同一テーブルへ連続してINSERTを行うことがあります。下記は昨日の記事の例です。 この実行結果がこちらです。 普通ですね（笑） 「ちゃんとトランザクションかけろ」という意 [&#8230;]</p>
The post <a href="https://sandambara.com/tips-postgresql-multi-insert">PostgreSQL小ネタ（一発INSERT）</a> first appeared on <a href="https://sandambara.com">ITとガジェットあれこれ</a>.]]></description>
										<content:encoded><![CDATA[<p><a href="https://sandambara.com/tips-postgresql-pivot" target="_blank">昨日の記事</a>を公開した後で思い出したtipsです。同一テーブルへ連続してINSERTを行うことがあります。下記は昨日の記事の例です。</p>



<pre class="wp-block-code"><code>-- テストデータ投入
INSERT INTO testtable VALUES(1, '2020-01-01', 'りんご', 1000);
INSERT INTO testtable VALUES(2, '2020-01-01', 'りんご', 2000);
INSERT INTO testtable VALUES(3, '2020-01-01', 'バナナ', 3000);
INSERT INTO testtable VALUES(4, '2020-02-02', 'りんご', 1000);
INSERT INTO testtable VALUES(5, '2020-03-03', 'りんご', 5000);
INSERT INTO testtable VALUES(6, '2020-03-03', 'みかん', 1000);
INSERT INTO testtable VALUES(7, '2020-03-03', 'バナナ', 3000);
INSERT INTO testtable VALUES(8, '2020-04-03', 'いちご', 4000);
INSERT INTO testtable VALUES(9, '2020-04-04', 'りんご', 1000);
INSERT INTO testtable VALUES(10,'2020-04-01', 'バナナ', 1000);</code></pre>



<p>この実行結果がこちらです。</p>



<pre class="wp-block-code"><code>sandambara=> -- テストデータ投入
sandambara=> INSERT INTO testtable VALUES(1, '2020-01-01', 'りんご', 1000);
INSERT 0 1
sandambara=> INSERT INTO testtable VALUES(2, '2020-01-01', 'みかん', 2000);
INSERT 0 1
sandambara=> INSERT INTO testtable VALUES(3, '2020-01-01', 'バナナ', 3000);
INSERT 0 1
sandambara=> INSERT INTO testtable VALUES(4, '2020-02-02', 'りんご', 1000);
INSERT 0 1
sandambara=> INSERT INTO testtable VALUES(5, '2020-03-03', 'りんご', 5000);
INSERT 0 1
sandambara=> INSERT INTO testtable VALUES(6, '2020-03-03', 'みかん', 1000);
INSERT 0 1
sandambara=> INSERT INTO testtable VALUES(7, '2020-03-03', 'バナナ', 3000);
INSERT 0 1
sandambara=> INSERT INTO testtable VALUES(8, '2020-04-03', 'いちご', 4000);
INSERT 0 1
sandambara=> INSERT INTO testtable VALUES(9, '2020-04-04', 'りんご', 1000);
INSERT 0 1
sandambara=> INSERT INTO testtable VALUES(10,'2020-04-01', 'バナナ', 1000);
INSERT 0 1</code></pre>



<p>普通ですね（笑）</p>



<p>「ちゃんとトランザクションかけろ」という意見はあるかもしれませんが、だからと言ってこのSQLが悪い訳ではありません。でも、もっとスマートな方法があります。こちらのSQLをご覧ください。</p>



<pre class="wp-block-code"><code>-- 上記はこのように書ける
INSERT INTO testtable VALUES
(1, '2020-01-01', 'りんご', 1000),
(2, '2020-01-01', 'りんご', 2000),
(3, '2020-01-01', 'バナナ', 3000),
(4, '2020-02-02', 'りんご', 1000),
(5, '2020-03-03', 'りんご', 5000),
(6, '2020-03-03', 'みかん', 1000),
(7, '2020-03-03', 'バナナ', 3000),
(8, '2020-04-03', 'いちご', 4000),
(9, '2020-04-04', 'りんご', 1000),
(10,'2020-04-01', 'バナナ', 1000);</code></pre>



<p>実行結果はこちらです。</p>



<pre class="wp-block-code"><code>sandambara=> INSERT INTO testtable VALUES
sandambara-> (1, '2020-01-01', 'りんご', 1000),
sandambara-> (2, '2020-01-01', 'りんご', 2000),
sandambara-> (3, '2020-01-01', 'バナナ', 3000),
sandambara-> (4, '2020-02-02', 'りんご', 1000),
sandambara-> (5, '2020-03-03', 'りんご', 5000),
sandambara-> (6, '2020-03-03', 'みかん', 1000),
sandambara-> (7, '2020-03-03', 'バナナ', 3000),
sandambara-> (8, '2020-04-03', 'いちご', 4000),
sandambara-> (9, '2020-04-04', 'りんご', 1000),
sandambara-> (10,'2020-04-01', 'バナナ', 1000);
INSERT 0 10</code></pre>



<p>1つのSQLで実行できました。「ちりも積もれば」ではありませんが、こういう細かなテクニックは後々効いてきますのでぜひマスターしておきましょう！</p>



<script type="text/javascript">amzn_assoc_ad_type ="responsive_search_widget"; amzn_assoc_tracking_id ="sandambara02-22"; amzn_assoc_marketplace ="amazon"; amzn_assoc_region ="JP"; amzn_assoc_placement =""; amzn_assoc_search_type = "search_widget";amzn_assoc_width ="auto"; amzn_assoc_height ="auto"; amzn_assoc_default_search_category =""; amzn_assoc_default_search_key ="PostgreSQL";amzn_assoc_theme ="light"; amzn_assoc_bg_color ="FFFFFF"; </script><script src="//z-fe.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&amp;Operation=GetScript&amp;ID=OneJS&amp;WS=1&amp;Marketplace=JP"></script>The post <a href="https://sandambara.com/tips-postgresql-multi-insert">PostgreSQL小ネタ（一発INSERT）</a> first appeared on <a href="https://sandambara.com">ITとガジェットあれこれ</a>.]]></content:encoded>
					
					<wfw:commentRss>https://sandambara.com/tips-postgresql-multi-insert/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
