0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PostgreSQL

Posted at

tips

IPアドレスの確認

hostname -I

pgAdmin 4

apt でインストールする場合

curl -fsS https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo gpg --dearmor -o /usr/share/keyrings/packages-pgadmin-org.gpg
sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/packages-pgadmin-org.gpg] https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/$(lsb_release -cs) pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update'
sudo apt install pgadmin4

操作方法

バックアップ

SQLとしてエクスポート

  • General
    • Format: Plain
    • Encoding: UTF8
  • Data Options
    • Do not save
      • Owner: on
      • Privileges: on
  • Query Options
    • Use INSERT Commands: on

pandas

SQLite3からPostgreSQLへのデータ移行


Windows

以下のリンクからインストーラーをダウンロード

インストールの流れについては以下を参照のこと

psql で文字化けする場合は,以下のサイトを参考に文字コードをUTF-8に変更する

サーバーにPostgreSQLをインストール (Ubuntu)

sudo apt update && sudo apt install -y postgresql

PostgreSQLのサービスが起動しているかを確認

systemctl status postgresql.service

PostgreSQLが起動している場合は,Active: active (exited) と表示される

動作確認

デフォルトユーザー「postgres」にログインして,psql を起動

sudo -u postgres psql

バージョン確認

postgres=# SELECT version();
                                                             version                
---------------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 16.4 (Ubuntu 16.4-0ubuntu0.24.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0, 64-bit
(1 row)

表示を閉じる場合は \q を入力

データベースの確認

postgres=# \l
                                                       List of databases
   Name    |  Owner   | Encoding | Locale Provider |   Collate   |    Ctype    | ICU Locale | ICU Rules |   Access privileges
-----------+----------+----------+-----------------+-------------+-------------+------------+-----------+-----------------------
 postgres  | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           |
 template0 | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =c/postgres          +
           |          |          |                 |             |             |            |           | postgres=CTc/postgres
 template1 | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =c/postgres          +
           |          |          |                 |             |             |            |           | postgres=CTc/postgres
(3 rows)

こちらも,表示を閉じる場合は \q を入力

パスワードを設定

postgres=# ALTER ROLE postgres WITH password '<パスワード>';

データベースを作成

postgres=# CREATE DATABASE <データベース名>;

データベースを削除

postgres=# DROP DATABASE <データベース名>;

ログアウト

postgres=# \q

外部からの接続を許可(サーバー側)

Ubuntu 24の場合,PostgreSQLのバージョンは 16
/etc/postgresql/16/main/postgresql.conf を書き換える
Windowsの場合は C:\Program Files\PostgreSQL\16\data\postgresql.conf

sudo vi /etc/postgresql/<PostgreSQLのバージョン>/main/postgresql.conf
  #------------------------------------------------------------------------------
  # CONNECTIONS AND AUTHENTICATION
  #------------------------------------------------------------------------------

  # - Connection Settings -

- listen_addresses = 'localhost'    # what IP address(es) to listen on;
+ listen_addresses = '*'            # what IP address(es) to listen on;
                                    # comma-separated list of addresses;
                                    # defaults to 'localhost'; use '*' for all
                                    # (change requires restart)
  port = 5432                       # (change requires restart)

/etc/postgresql/16/main/pg_hba.conf を書き換える
Windowsの場合は C:\Program Files\PostgreSQL\16\data\pg_hba.conf

sudo vi /etc/postgresql/<PostgreSQLのバージョン>/main/pg_hba.conf

許可したいクライアントのIPアドレスを
host <データベース名> <ユーザー名> <クライアントのIPアドレス>/24 <md5>
で追加

IPアドレスを制限しない場合は,0.0.0.0/0 を追加
(許可したいIPアドレスを1つずつ追加するほうが安全)

  # TYPE  DATABASE        USER            ADDRESS                 METHOD

  # "local" is for Unix domain socket connections only
  local   all             all                                     peer
  # IPv4 local connections:
  host    all             all             127.0.0.1/32            scram-sha-256
+ host    all             all             192.168.50.10/24        md5

PostgreSQLを再起動し,設定変更を反映させる

sudo service postgresql restart

ポート開放

Windows

以下のサイトを参考にして,PostgreSQL用に5432番(デフォルトの場合)を開放

Ubuntu

現在開放されているポートを確認

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
22 (v6)                    ALLOW       Anywhere (v6)

Status: inactive と出力された場合は,Firewallが無効化されている

上の例ではSSH用の22番のみ開放されているため,PostgreSQL用の5432番(デフォルトの場合)を開放
下の例では,PHP用にApacheの80番も開放

sudo ufw allow 5432  # PostgreSQL
sudo ufw allow 80    # Apache
sudo ufw reload
sudo ufw status

ポートが開放されたか確認

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
5432                       ALLOW       Anywhere
80                         ALLOW       Anywhere
22 (v6)                    ALLOW       Anywhere (v6)
5432 (v6)                  ALLOW       Anywhere (v6)
80 (v6)                    ALLOW       Anywhere (v6)

外部からの接続確認(クライアント側)

クライアント用PostgreSQLをインストール

sudo apt install -y postgresql-client
psql -h <サーバーPCのIPアドレス> -U <ユーザー名> -d <データベース名>

PHPによるPostgreSQLへの接続確認

Apacheのインストール

sudo apt install -y apache2

バージョン確認

pache2ctl -V
結果
Server version: Apache/2.4.58 (Ubuntu)

再起動後もApacheを起動させる

sudo systemctl enable apache2

PHPのインストール

sudo apt install -y php

バージョン確認

php -v
PHP 8.3.6 (cli) (built: Jun 13 2024 15:23:20) (NTS)

/var/www/html/psql-test.php を作成

sudo vi /var/www/html/psql-test.php
/var/www/html/psql-test.php
<?php
phpinfo();
?>

ブラウザーで localhost/psql-test.php にアクセス

PostgreSQLへの接続確認

sudo apt install -y php-pgsql

/var/www/html/psql-test.php を編集

sudo vi /var/www/html/psql-test.php
/var/www/html/psql-test.php
<html>
<head><title>PHP TEST</title></head>
<body>

<?php
ini_set("display_errors", 1);
error_reporting(E_ALL);

$conn = "host=<サーバーPCのIPアドレス> port=<ポート番号> user=<ユーザー名> password=<パスワード> dbname=<データベース名>";
$link = pg_connect($conn);
if (!$link) {
    die('接続失敗です。'.pg_last_error());
}

echo('接続に成功しました。<br>');

// PostgreSQLに対する処理

$close_flag = pg_close($link);

if ($close_flag){
    echo('切断に成功しました。<br>');
}

?>
</body>
</html>
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?