kyoagunのブログ

技術系、PdMについてを書いていこうと思います。

PostgreSQLでよく使うコマンドのまとめ

PostgreSQLを数年前から使ってきたが、
メインは、PHPのライブラリー(PDO)で扱うため、
直接コマンドで扱うことが少なく、いまだに使おうと思った際に、
MySQLのコマンドと混同したら、記憶から出てこないことがある。

そのため、PostgreSQLでよく使うコマンドについて、まとめてみた。
今後も追加していく予定だ。

よく使うコマンド

バージョンを確認する

$ psql —version
# select version();

ヘルプを表示

$ psql --help
# \?
# \h

データベース

データベースに入る

$ psql <DB_NAME>

ユーザーを指定してデータベースに入る

$ psql -U <USER_NAME> <DB_NAME>

ホスト、ポートとユーザーを指定してデータベースに入る

$ psql -h <HOST> -p <PORT> -U <USER_NAME> -d <DB_NAME>

データベースから出る

# \q

データベースを起動

$ postgres -D /usr/local/var/postgres

データベース一覧表示

$ psql -l
# \l

データベースの切り替え

# \c <DB_NAME>\
# \connect <DB_NAME>

データベースを削除

# drop database <DB_NAME>;

テーブル

テーブル一覧表示(viewやsequenceも含む)

# \d

テーブル一覧表示

# \dt

テーブルのスキーマの詳細を表示

# \d <TABLE_NAME>

テーブルのアクセス権限表示

# \z <TABLE_NAME>

viewの一覧を表示

# \dv

viewの定義を表示

# select definition from pg_views where viewname = '<VIEW_NAME>';

テーブル名変更

# alter table <CURRENT_DB_NAME> rename to <NEW_DB_NAME>;

テーブルを削除

# drop table <TABLE_NAME>;

ユーザー権限

現在のユーザー(Role)を表示

# select current_user;

ユーザー(Role)の一覧を表示

# \du

ユーザー情報一覧を表示

# select * from pg_user;

ユーザー (Role)に権限を付与

# grant select, insert, update, delete on <TABLE_NAME> to <USER_NAME>;

ユーザー (Role)に権限を剥奪

# revoke select, insert, update, delete on <TABLE_NAME> from <USER_NAME>;

ユーザーの切り替え

# \connect - <USER_NAME>

スーパーユーザーへ変更

# alter role <USER_NAME> with creatural superuser;

スーパーユーザー権限剥奪

# alter role <USER_NAME> with creatural nosuperuser;

スキーマ

スキーマ作成

# create schema <schema_name>;

スキーマを確認

# select current_schema;

スキーマ一覧

# \dn

スキーマ変更

# set search_path to <schema_name>;

以上です。

a problem occurred evaluating project ':app'. > no installed build tools found. install the android build tools version 19.1.0 or higher.

タイトルのエラーについて、私をずっと悩ませてきました。何回か解決しようと頑張ってみたが、失敗の連続で、放置していました。

同じ悩みを抱えている方もたくさんいると思って、今度こそ絶対解決すると決めました。そうして、二日ぐらい頑張った末、解決する方法を見つかりました。

エラーについて

まず、エラーの内容を見てみましょう。

写真のエラーで、おそらく何種類かいると思います。

「no installed build tools found. install the android build tools version 31.0.0 or higher.」、「no installed build tools found. install the android build tools version 19.1.0 or higher.」など、それぞれですが、対象方法はみんな同じです。

解決方法について

まず、環境変数の設定を見直します。結果から言うと、下記のように設定すればいいです。

①システム環境変数の設定、ANDROID_HOME、ANDROID_SDK_ROOの設定、二つとも同じ値を設定する。

②PATHの設定、まとめてみました。

%ANDROID_SDK_ROOT%\tools

%ANDROID_HOME%\tools

%ANDROID_HOME%\platform_tools

%ANDROID_HOME%\build-tools

%ANDROID_HOME%\platforms

③ build tools のライブラリーをエラーの内容に合わせて、バージョンを変更します。

例)下記のエラーの場合は、添付写真のように変更します。

「no installed build tools found. install the android build tools version 31.0.0 or higher.」

上記の設定が完了したら、コマンドプロンプトを再起動して、Corderva run android を打ってみましょう。

下記のように「LAUNCH SUCCESS」が出れば成功です。

以上です。

AWSEC2でLAMP環境(Apache,PHP,MySQL)の構築

AWSEC2でLAMP環境(Apache,PHP,MySQL)の構築手順を紹介します。

#apach php設定
sudo yum update -y

sudo yum -y install httpd

sudo systemctl start httpd.service

sudo systemctl enable httpd.service

sudo amazon-linux-extras install epel

sudo yum install epel-release

sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

sudo yum install -y php73 php73-php php73-php-fpm  php73-php-mbstring  php73-php-pdo php73-php-mysqlnd php73-php-xml php73-php-intl

sudo ln -s /usr/bin/php73 /usr/bin/php

sudo yum install git

sudo systemctl reload httpd


# タイムゾーン設定
sudo vi /etc/sysconfig/clock
ZONE="Japan"

sudo ln -sf /usr/share/zoneinfo/Japan /etc/localtime

sudo vi /etc/opt/remi/php73/php.ini
# 下記を追記
date.timezone = "Asia/Tokyo"
# AWSのEC2インスタンスから再起動

# MySQL設定
# mariaDB削除してから
sudo yum remove mariadb-libs
sudo rm -rf /var/lib/mysql
sudo yum install mysql

# 日本語の設定
sudo localectl set-locale LANG=ja_JP.UTF-8
sudo localectl set-keymap jp106

# Apacheの再起動
sudo systemctl reload httpd.service

以上です。

.htaccessでerror_reportingを設定すると、開発がはかどる

最近、よくPHP関連の開発に携わっている。そのため、最初にやるのは、
.htaccessでerror_reportingを設定するとのことである。

どのように設定したかを紹介する。

htaccessの設定

php_flag log_errors On #エラーをファイルに保存する
php_value error_log "/var/www/myproject/logs/error.log" #エラー表示先を指定する
php_value error_reporting 6135 #表示するエラー種別(6135:すべて

上記の設定では、PHPのワーニングを含めたエラーメッセージを表示するようにしている。
いいソースコードは、ワーニングが出ないように書いたほうがいいと思う。

エラー種別についてはほかにいろいろあるが、詳しく知りたければ、下記を参照。

エラー種別

以上です。

WordPressウェブサイトの「403 Forbidden」エラーについて

ある日、WordPressウェブサイトにアクセスしたら、「403 Forbidden」が発生した。

調べてみたら、WordPress アドレス (URL)が間違って変更されてしまったのが原因でした。

対応方法

DBのwp_optionsテーブルのsiteurlを修正することで直りました。

正しいsiteurl
https://domain.jp/wp

間違ったsiteurl
https:// domain.jp

以上、お役に立てたらうれしいです。

PHPで連想配列をJSONにする

PHP連想配列JSONにする方法を紹介します。

PHP連想配列JSONにする際に、使う関数は、json_encodeです。

json_encode(mixed $value, int $flags = 0, int $depth = 512): string|false

引数
第一引数:エンコードする値。すべての文字列データは、UTF-8 エンコードされていなければいけません。
第二引数(省略可):定数の種類は公式ページを参照願います。日本語の場合JSON_UNESCAPED_UNICODEを指定します。
第三引数(省略可):最大の深さを設定します。正の数でなければいけません。

戻り値
成功した場合に、JSON エンコードされた文字列を返します。 失敗した場合に false を返します。

※詳細は、https://www.php.net/manual/ja/function.json-encode.phpを参照。

サンプル(日本語なし)

<?php

$colorArray = array(
        'color1'=>'red',
        'color2'=>'yello',
        'color3'=>'blue'
);

$colorJson = json_encode($colorArray);

var_dump($colorJson);

// 出力結果: string(49) "{"color1":"red","color2":"yello","color3":"blue"}"
?>

サンプル(日本語あり)

<?php

$colorArray = array(
    'color1'=>'赤',
    'color2'=>'黄',
    'color3'=>'青'
);

$colorJson = json_encode($colorArray, JSON_UNESCAPED_UNICODE);

var_dump($colorJson);

// 出力結果: string(46) "{"color1":"赤","color2":"黄","color3":"青"}"

?>

以上です。

PostgreSQLでUPDATE、INSERT(UPSERT)を同時に処理させる

PostgreSQLで「あればUPDATE、なければINSERT」のUPSERTを実現する万能な方法を紹介します。
※古いバージョンのPostgreSQLで対応。

文法

UPDATE 
    テーブル名
SET 
    カラム名1 = 更新値1,
    カラム名2 = 更新値2
WHERE カラム名3 = カラム名3の条件値;
INSERT INTO テーブル名 (カラム名1, カラム名2, カラム名3)
SELECT 更新値1, 更新値2, カラム名3の条件値
WHERE NOT EXISTS (SELECT 1 FROM テーブル名 WHERE カラム名3 = カラム名3の条件値)

サンプル

UPDATE 
    product
SET 
    name = '{$name}',
    price = '{$price}'
WHERE id = '{$id}';
INSERT INTO product(id, name, price)
SELECT '{$id}', '{$name}', '{$price}'
WHERE NOT EXISTS (SELECT 1 FROM product WHERE id = '{$id}')

以上です。