<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>データベース on Marketechlabo</title><link>https://www.marketechlabo.com/tags/database/</link><description>Recent content in データベース on Marketechlabo</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><lastBuildDate>Mon, 08 Apr 2019 00:00:00 +0900</lastBuildDate><atom:link href="https://www.marketechlabo.com/tags/database/index.xml" rel="self" type="application/rss+xml"/><item><title>PostgreSQLの管理系コマンドまとめ</title><link>https://www.marketechlabo.com/server-infrastructure/postgresql-commands/</link><pubDate>Mon, 08 Apr 2019 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/server-infrastructure/postgresql-commands/</guid><description>
&lt;p&gt;DBの管理系コマンドは導入専門にやっていれば忘れることはないのだが、
分析目的でちょっとインストールした場合など、そんな頻繁に設定しない場合は忘れてしまう。
そんなPostgreSQLの管理コマンド、ユーザ管理など意外と落とし穴があるので復習しておく。
Cloud SQL、RDS、AlloyDBなどのマネージドDBを利用する場合は&lt;code&gt;pg_ctl&lt;/code&gt;や&lt;code&gt;initdb&lt;/code&gt;は不要である。
導入手順は&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;インストール&lt;/li&gt;
&lt;li&gt;データベースディレクトリの作成（&lt;code&gt;initdb&lt;/code&gt;コマンド）&lt;/li&gt;
&lt;li&gt;起動（&lt;code&gt;pg_ctl&lt;/code&gt;コマンド）&lt;/li&gt;
&lt;li&gt;ユーザの登録（&lt;code&gt;createuser&lt;/code&gt;コマンド）&lt;/li&gt;
&lt;li&gt;データベースの作成（&lt;code&gt;createdb&lt;/code&gt;コマンド）&lt;/li&gt;
&lt;li&gt;データベースの権限管理&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;という順になる。&lt;/p&gt;
&lt;h2 id="pg_ctlコマンド"&gt;pg_ctlコマンド&lt;/h2&gt;
&lt;p&gt;起動、停止などのコマンド。
postgresユーザでないと実行できない。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pg_ctl &lt;span style="color:#66d9ef"&gt;start&lt;/span&gt; &lt;span style="color:#f92672"&gt;-&lt;/span&gt;D &lt;span style="color:#960050;background-color:#1e0010"&gt;データディレクトリ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pg_ctl stop &lt;span style="color:#f92672"&gt;-&lt;/span&gt;D &lt;span style="color:#960050;background-color:#1e0010"&gt;データディレクトリ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pg_ctl &lt;span style="color:#66d9ef"&gt;restart&lt;/span&gt; &lt;span style="color:#f92672"&gt;-&lt;/span&gt;D &lt;span style="color:#960050;background-color:#1e0010"&gt;データディレクトリ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="その他管理コマンド"&gt;その他管理コマンド&lt;/h2&gt;
&lt;h3 id="initdb"&gt;&lt;code&gt;initdb&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;データディレクトリの生成。これがないと起動もできないし、データベースも作成できない。
新しく作るデータベースのデフォルトエンコーディング、ロケール（通常不要）を指定できる&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;initdb
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;initdb &lt;span style="color:#960050;background-color:#1e0010"&gt;データディレクトリ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;initdb &lt;span style="color:#f92672"&gt;-&lt;/span&gt;E UTF8 &lt;span style="color:#75715e"&gt;--locale=C データディレクトリ
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;データディレクトリを指定しない場合、環境変数&lt;code&gt;PGDATA=/var/lib/postgres/data&lt;/code&gt;の値が採用される。&lt;/p&gt;
&lt;h3 id="createdb"&gt;&lt;code&gt;createdb&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;データベースを作成。デフォルトで&lt;code&gt;initdb&lt;/code&gt;のエンコーディングが採用される。
デフォルトでない文字コードを採用する場合は文字コード、ロケールに加えて「-T template0」も必要。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;createdb&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;データベース名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;createdb&lt;/span&gt; &lt;span style="color:#f92672"&gt;-&lt;/span&gt;E UTF8 &lt;span style="color:#f92672"&gt;-&lt;/span&gt;l &lt;span style="color:#66d9ef"&gt;C&lt;/span&gt; &lt;span style="color:#f92672"&gt;-&lt;/span&gt;T template0 &lt;span style="color:#960050;background-color:#1e0010"&gt;データベース名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="dropdb"&gt;&lt;code&gt;dropdb&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dropdb &lt;span style="color:#960050;background-color:#1e0010"&gt;データベース名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="バックスラッシュコマンド"&gt;バックスラッシュコマンド&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;\d&lt;/code&gt;: テーブル一覧&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\l&lt;/code&gt;: データベース一覧&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\z&lt;/code&gt;: 権限一覧&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\c データベース名&lt;/code&gt;: 接続するデータベースの変更&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\du&lt;/code&gt;: ユーザ一覧&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\i SQLファイル名&lt;/code&gt;: SQLファイルの実行&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="権限"&gt;権限&lt;/h2&gt;
&lt;h3 id="最初にやるべきこと"&gt;最初にやるべきこと&lt;/h3&gt;
&lt;p&gt;デフォルトで作成したすべてのユーザは&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;すべてのデータベースに接続できる&lt;/li&gt;
&lt;li&gt;スキーマ&lt;code&gt;public&lt;/code&gt;ではすべての権限が与えられている&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ということで、管理者が意図していない権限のテーブルにアクセスできてしまう。
そこでこれらの権限を削除する必要がある。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;REVOKE&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;CONNECT&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;ON&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;DATABASE&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;データベース名&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;FROM&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;PUBLIC&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;REVOKE&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;ALL&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;ON&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;SCHEMA&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;FROM&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;PUBLIC&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;必要に応じてユーザに&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;GRANT&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;CONNECT&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;ON&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;DATABASE&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;データベース名&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;TO&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;ユーザ名&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;GRANT&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;USAGE&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;ON&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;SCHEMA&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;TO&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;ユーザ名&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ユーザの追加"&gt;ユーザの追加&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;createuser&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;ユーザ名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;createuser&lt;/span&gt; &lt;span style="color:#f92672"&gt;-&lt;/span&gt;P &lt;span style="color:#960050;background-color:#1e0010"&gt;ユーザ名&lt;/span&gt; &lt;span style="color:#f92672"&gt;#&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;パスワードを指定&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="パスワードの変更"&gt;パスワードの変更&lt;/h3&gt;
&lt;p&gt;データベース&lt;code&gt;template1&lt;/code&gt;に接続して&lt;/p&gt;</description></item></channel></rss>