Rinkerのエラーでリクエスト回数が多すぎますのエラー

題名通り最初に結論から。

『Rikerの商品検索で「リクエスト回数が多すぎます」のエラーを解消するには、

Rinkerの設定で、楽天の「アプリID/デベロッパーID」を登録すれば解消されます。』

 

 

原因ですが、どうもRinkerでは商品検索する時に全員共通のIDを使用して検索している様子。

 

そのため誰かがどこかで検索をいろいろしていると(=同じIDでの検索が多い)となり、

「あなた検索しすぎ」ということではねられる。

 

そのため私は(共通ユーザー)とは違いますよとして、アプリID/デベロッパーIDを入れておく。

そうすると検索できるようになる。

事実私はこれだけで検索できるようになったので、ハマった人の参考になれば。

 

ちなみにアプリID/デベロッパーIDは「Rakuten Developers」の「アプリID発行」からできます。

※他のサイトでいろいろ紹介されているので、ここは省略。

 

 

 

データを削除する2つの方法

PostgreSQLでのテーブルにデータを削除するには、以下の方法が主にあります。

1.pgAdminで手作業でデータを削除する

2.DELETE文を使用してデータを削除する

 

の作業は、画面で削除するため確認しながら徐々に削除することに向いています。

2の場合、構文を覚える必要がありますが、大量・高速にデータの削除ができます。

このページではそれぞれについて説明します。

 

 

1. pgAdminで手作業でデータを削除する

pgAdminでデータを削除する方法について手順を説明します。

 

1-1.①テーブルを右クリック、②「データの閲覧/編集」から「すべての行」を選択します。

すでに大量のデータが登録されている場合、「最初の100行」でも構いません。

 

1-2.データが表示される画面が開くので、①消したい行を選択し、

②ごみ箱のアイコンを押します

 

1-3.①ごみ箱アイコンを押すと、その行に取り消し線が引かれた状態になります。

②データ保存のボタンを押します。

 

1-4.問題なく削除(=保存)できたらメッセージが表示されます。

 

 

2-1. DELETE文を使用してデータを削除する(構文)

DELETE文とはテーブルデータを削除することができるSQLです。

 

・ 基本的なDELETE文の形

DELETE文は基本的には次のような形になります。

-- 基本的なDELETE文の形
DELETE FROM テーブル名 WHERE 条件文;

-- 例
delete from department; --条件を入れなければすべてのデータを削除する
delete from department where department_code = 'c';
delete from department where department_code in('a','c','e');

 

 

2-2. DELETE文を使用してデータを削除する(実行の仕方)

上で紹介した例文は、pgAdminのクエリツールより実行ができます。

 

1. pgAdminを開きクエリツールを起動します。

pgAdminを開き、次のように①データベースを選択した状態で、②クエリツールを開きます。

 

2. pgAdminを開きクエリツールを起動します。

①の箇所にDELETE文を記述し、②実行ボタンを押します。

 

3. クエリ実行成功のメッセージが表示されることを確認

成功のメッセージが表示されれば無事に登録ができました。

 

 

 

 

データが編集できない時の原因

pgAdminでテーブルのデータを編集しようとした時、他のテーブルなら編集できるのに、

そのテーブルだけ編集できないといったケースがあるかと思います。

 

おそらく原因は「そのテーブルに主キーが設定されていないから。」です

一度確認してみてください。※ ちなみにINSERTは普通にできますよ。

 

 

対処例:主キーをつけるSQL

主キーをつけるSQLを書いておきますのでご参考まで。

主キーにする列名がNOT NULLになっていない場合、勝手にNOT NULLになります。

主キー列にすでにnull値があった場合、エラーになりますのでご注意下さい。

(null値のデータを消す or 別の値で更新する or 別の列を主キーにする必要があります)

--主キーを追加するSQL(1列だけで主キーの時)
ALTER TABLE テーブル名 ADD CONSTRAINT 主キー名 PRIMARY KEY (列名); 

--主キーを追加するSQL(複数の列で主キーの時)
ALTER TABLE テーブル名 ADD CONSTRAINT 主キー名 PRIMARY KEY (列名1 , 列名2);

 

 

データを取得する方法

PostgreSQLでテーブルのデータを取得するには、以下の方法が主にあります。

1.SELECT文を使用して取得する

2.pgAdminで取得する方法

 

どちらもデータを取得できる点は変わりませんが、1についてはSELECT文を覚えることで、

PostgreSQLでなく他のデータベース等にも活用できます。(情報処理の試験等にも)

このページでは、それぞれの方法について説明します。

 

 

1.SELECT文を使用して取得する(構文)

・ 基本的なSELECT文

SELECT文とはテーブルのデータを取得するSQLです。

SELECT文を実行することによってテーブルのデータを取得できます。

(ちなみにselectやfromは大文字、小文字はどちらでも構わないです。)

-- 基本的な形のSELECT文
select 列名1 , 列名2 , ・・・ from テーブル名;

-- 列名をアスタリスク「*」にすると、すべての列を取得する
select * from テーブル名;

-- 例
select department_code , department_name from department;
select * from department;

 

・ 取得後の列名は変更できる

列名の後にASをつけることで、取得後の列名を変更することができます。

-- as句で列名を変更することができる
select 列名1 as 変更後の列名1 , 列名2 as 変更後の列名2 from テーブル名;

-- 例
select department_code as "部署コード" , department_name as "部署名" 
from department;

 

・ 取得するデータの抽出条件を設定できる

fromの後にwhereで抽出条件を指定できます。

-- where句で抽出条件を指定できる
select 列名1 , 列名2 from テーブル名 where 抽出条件文;

-- 例
select department_code , department_name from department 
where department_code = 'b';

 

 

1.SELECT文を使用して取得する(実行の仕方)

上で紹介した例文は、pgAdminのクエリツールより実行します。

 

1. pgAdminを開きクエリツールを起動します。

pgAdminを開き、次のように①データベースを選択した状態で、②クエリツールを開きます。

 

2. SELECT文を実行すると結果が表示されます。

①の箇所にSELECT文を記述(または貼り付け)し、②実行ボタンを押します。

③の箇所に結果が表示されます。(②の実行ボタンはF5ボタンでも実行できます。)

 

 

2.pgAdminの操作

テーブルを右クリックし、「データの閲覧/編集」から、次のいずれかを選択すると表示されます。

※ データ量がそれほど多くない、よくわからない場合はすべての行か、最初の100行でよいです。

 

・すべての行を選択 ・・・ すべての行を取得し表示する

・最初の100行   ・・・ 列〇〇を昇順に並べ、100行取得し表示する

・最後の100行   ・・・ 列〇〇を降順に並べ、100行取得し表示する

・フィルタリングした行 ・・・ 最初に条件を入力し、その条件で取得したデータを表示する

すべての行を表示する場合

 

「フィルタリングした行」の入力の仕方

・ フィルタリングした行の入力の仕方

「フィルタリングした行」は、SELECT文でのWHERE句に書く内容を記載します。

「WHERE」と最後の「;」はなしでOKです。

 

入力例:departmet_codeで抽出する例

 

 

出力結果

 

 

テーブルを作成する方法(pgAdminで作成する)

ここではテーブルを作成する方法のうち、pgAdminを使って作成する手順を紹介します。

pgAdminを使うとSQLがわからなくても、画面操作でテーブルが作成できるメリットがあります。

SQL(CREATE文)はこちらで説明しています。

 

 

テーブル作成の手順

それでは、テーブル作成の手順を説明します。

(作成するテーブルは、CREATE文の時に作成したテーブルにしました)

 

1.①pgAdminの左にあるテーブルを右クリックし、②作成>テーブルを押します。

 

 

2.名称のところにテーブル名を入力します

 

 

3.次に作成する列を設定します。

①列タブを表示、②+ボタンを押し、③の箇所に作成する列を設定します。

(department_codeは主キーにする予定なので、NOT NULLをYESにしています。)

 

 

4.次に主キーを設定します。

①制約タブから、②の+ボタン、③で名称の箇所に主キー名を入れます。

④の編集ボタンを押します。

 

 

5.主キーに設定する列を指定し、右下の「保存」ボタンを押します。

 

 

6.作成されたことが確認できると思います

 

pgAdminでの作成手順は以上です。

 

 

テーブルを作成する

テーブルを作成するには主に次の2つの方法があります。

① pgAdminを使い、画面から作成する

② CREATE TABLE文を実行し作成する

 

①の方法は、画面操作のみで簡単にできる反面、

PostgreSQL特有の操作になるため、汎用性があまりないというデメリットがあります。

 

②に関しては、CREATE文という構文を覚えれば

PostgreSQLだけでなく、他のデータベースでも使用可能なため汎用性があります

また、慣れてしまえば画面操作よりもかなり早くテーブルの作成が可能です。

 

そのためここからテーブル作成についての説明を

1.CREATE文での作成方法(この記事)

2.CREATE文の構文の説明

3.pgAdminを使ってテーブルを作成する

の順に進んでいこうと思います。

 

 

CREATE文を実行してみる

さていきなりですが、1つテーブルを作成してみたいと思います。

次の文は、部署を登録するテーブル(部署マスタ)を作成するCREATE文です。

 

1. CREATE文をコピーする

下の文をコピーしましょう。

黒ところのどこかにマウスのフォーカスをあわせると、右上に「Copy」と表示されるので、

そのCopyボタンをクリックするとコピーされた状態になります。

-- 部署マスタ(department)を作成するCREATE文
CREATE TABLE department
(
    department_code character varying(10) NOT NULL,         -- 部署コード
	department_name character varying(100),                 -- 部署名
    CONSTRAINT pk_department PRIMARY KEY (department_code)  -- 主キー
);

 

2. pgAdminを開きクエリツールを起動します。

pgAdminを開き、次のように①データベースを選択した状態で、②クエリツールを開きます。

 

3. pgAdminを開きクエリツールを起動します。

①の箇所に貼り付けをし、②実行ボタンを押します。

 

4. クエリの成功メッセージが表示されることを確認します。

万が一エラーになった場合、そのまま貼り付けがうまくいっていない場合が考えられます。

下の画面のように貼り付けができているか再度確認してください。

 

5. テーブルの一覧に表示されたことを確認する

左のリストを展開(スキーマ>public>テーブルと展開する)に

「department」が作成されたことを確認します。

 

 

テーブルのSQLを確認する

①テーブルを選択した状態で、②SQLのタブを開くと、

そのテーブルを作るためのCREATE文をみることができます。

 

テーブルが作成出来たら、続いてはこちらを参照して下さい。

> CREATE文の構文の説明

> pgAdminを使ってテーブルを作成する

> テーブルへデータを登録する

 

 

pgAdminとは

pgAdminとは、PostgreSQLのデータベース操作を画面でできるツールです。

 

これを使わなくても、psqlというツールでも同じことができますが、

コマンドを入力する必要があるので若干難易度があがります。

そのためここでは操作が簡単なpgAdmin4について1から説明します。

 

pgsqlで操作する場合の画面

 

 

pgAdminの起動方法

pgAdminの起動方法です。

プログラム一覧のPostgreSQLと同じところにありますので、クリックして起動します。

(画面はWindows10の画面です。)

 

 

マスタパスワードの設定

pgAdmin4を起動させると「Set Master Password」のメッセージが表示されます。これはpgAdminを使用するためのパスワードを設定してと言っているので、好きなパスワードを入力をし「OK」ボタンを押します。ちなみにPostgreSQLのインストール時にもパスワードを入力したと思いますが、別扱いのものなので注意して下さい。(同じパスワードを設定することも可能です)

 

 

pgAdminの画面構成

pgAdmin4を起動した画面です。pgAdmin4はブラウザ上で動きます。

ブラウザ上で動作するため、普通に戻るボタンなどが使えてしまうので注意して下さい。

 

 

①の箇所は、メニュー部分です。

この中では、「ファイル > 設定」か「ツール > クエリツール」の2つだけ覚えておきましょう。

 

 

ファイル > 設定から日本語化をすることが可能です。

pgAdminを日本語にする方法はこちらの記事を参考にして下さい。

あわせて読みたい

https://postgresweb.com/post-192

 

 

 

②の箇所は、PostgreSQLのバージョンとデータベース等が表示される箇所です。

PostgreSQLは複数のバージョンをインストールすることができますが、

その場合、②の左上のように「PostgreSQL 12」「PostgreSQL 13」と表示されます。

そしてそのPostgreSQL13の下の階層として、データベース、テーブルなどが表示されます。

 

 

テーブルなどは、データベースの中にあるスキーマ > テーブルで確認することができます。

下の例ではデータベース「testdb」のテーブルを表示しています。

 

 

③の箇所は、左で選択した中身の詳細を表示する箇所です。

左で選択したものの中身等が表示される領域です。

③の上部はタブになっており、画面を切り替えることができます。

 

下の画面の例では、左側が「testdb」が選択、右側の上部で「SQL」が選択されているため

「testdb」の「SQL」が表示されています。

 

 

以上が画面構成の説明です。

続いてデータベースを作成してみましょう。手順はこちら。

あわせて読みたい

https://postgresweb.com/how-to-create-database

 

 

 

pgAdminの終了方法

終了する方法は、ブラウザの「×」ボタン、またはタブの「×」ボタンでOKです。

終了する時にメッセージが表示される場合がありますが、そのまま終了で構いません。

※ Google Chromeの場合、「このサイトを離れますか?」というメッセージが表示されますが

「このページを離れる」をクリックで終了します。

 

接続設定の方法

ここではPostgreSQLの「他のPCから接続できるための設定の仕方」を説明します。

PostgreSQLのインストール後の初期設定として参考にして下さい。

尚、変更点は2つあり、2つとも必要です。

 

※ また、自分のPC(ローカル環境)で接続するには、この設定は必要ありません。

 

1.postgresql.confの設定

①「postgresql.conf」を開く

postgresql.confというファイルを見つけ、メモ帳(などのエディタ)で開きます。

ファイルは初期フォルダでは次の場所にあります。『C:\Program Files\PostgreSQL\13\data』

 

※ メモ帳で開くには、あらかじめメモ帳を開いておき、

postgresql.confファイルをメモ帳にドラッグ&ドロップすると簡単に開きます。

 

 

②1行だけ内容を変更する。

postgresql.confの59行目(バージョンによって違うかもしれません)くらいに、

listen_addressの記述がある行があるので、そこを編集していきます。

(このファイルで、listen_addressの記述は1か所しかありません。)

 

結果からいうと、変更後の値が「listen_addresses = '*'」になるようにします。

すでにこの状態になっている場合は、この編集操作は必要ありません。

変更点1:先頭に#があったら削除する

変更点2:''の中は、半角のアスタリスク'*'にする

「# what IP …」の箇所はコメントなのでそのままでOKです。

-- 変更前の値
#listen_addresses = 'localhost'
↓
-- 変更後の値(すでにこれになっていた場合は、変更なしでOK)
listen_addresses = '*'		# what IP address(es) to listen on;

 

 

 

2.pg_hba.confの設定

2つ目は「pg_hba.conf」の設定です。

 

①「pg_hba.conf」を開く

pg_hba.confの場所は、この上で紹介しているpostgresql.confと同じ場所にあります。

 

②「pg_hba.conf」を編集する

基本的に変更するのは、IPの箇所のみで大丈夫だと思います。

「host all all」の箇所と、md5の箇所は初期値のままでOKです。

※ md5のところは認証方式

 

ここで紹介している変更後の例は、どのIPでも接続可の設定です。

オンプレの社内テスト環境のような場合であれば、これでもOKかと思います。

-- 変更前
# IPv4 local connections:
host    all             all             127.0.0.1/32         md5

↓

-- 変更後(1行追加)
# IPv4 local connections:
host    all             all             127.0.0.1/32         md5
host    all             all             0.0.0.0/0            md5

 

※ PostgreSQL13(もしかしたら他のバージョンでも)では、上の例で「md5」となっている所が、

「scram-sha-256」となっていると思います。

 

scram-sha-256認証は、以前からある md5 認証よりも安全なものです。

ただし古いバージョンのPostgreSQLでは使用できない点が注意です。

 

 

 

3.PostgreSQLの再起動

設定後、それでも接続がうまくいかない場合は、PostgreSQLの再起動をしてみて下さい。

再起動の方法は、こちらで説明しています。

 

予約語、未予約語とは

予約語・未来語とは、SQL文で使用するキーワードのことです。

例えば、『SELECT』、『FROM』もキーワードの一つです。

 

予約語と、未予約語の違いは、

予約語はテーブルや列名の名前に使用できないのに対し、未予約語は使用できる点です。

※ 仮に予約語をテーブル名に指定した場合、syntax error(文法エラー)になります。

 

PostgreSQLのバージョンごとの予約語、未予約語

PostgreSQLのバージョン毎にも、予約語・未予約語の違いがあるのでリンクを貼っておきます。

PostgreSQL 12

PostgreSQL 11

PostgreSQL 10

PostgreSQL 9.6

PostgreSQL 9.5

 

概要

二つの日付から経過した年月日を計算するにはage関数を使用します。

結果は次の例のようにinterval値(XX years XX mons XX days)という値になります。

--誕生日から年齢を計算する
age( 新しいほうの日付 , 古いほうの日付 ) 

-- 実行例 ※日付の前の「timestamp」という文字は必要なので、そのまま記述して下さい。
select age(timestamp '2020/1/1',timestamp '1990/1/1');   -- 30 years
select age(timestamp '2020/1/1',timestamp '1995/12/1');  -- 24 years 1 mon
select age(timestamp '2020/1/11',timestamp '1998/4/1');  -- 21 years 9 mons 10 days

 

 

実行例(呼び出し例)

上のままでは少々使いづらいので、年、月、日付だけ取得する例です。

例えば「21 years 9 mons 10 days」なら年の21、月の9だけ、日の10だけ取得する方法です。

--2つの日付から経過した年だけを取得
select date_part('year',age(timestamp '2020/1/1',timestamp '1990/1/1'));   -- 30
select date_part('year',age(timestamp '2020/1/1',timestamp '1995/12/1'));  -- 24
select date_part('year',age(timestamp '2020/1/11',timestamp '1998/4/1'));  -- 21

--2つの日付から経過した月だけを取得
select date_part('month',age(timestamp '2020/1/1',timestamp '1990/1/1'));   -- 0
select date_part('month',age(timestamp '2020/1/1',timestamp '1995/12/1'));  -- 1
select date_part('month',age(timestamp '2020/1/11',timestamp '1998/4/1'));  -- 9

--2つの日付から経過した日だけを取得
select date_part('day',age(timestamp '2020/1/1',timestamp '1990/1/1'));   -- 0
select date_part('day',age(timestamp '2020/1/1',timestamp '1995/12/1'));  -- 0
select date_part('day',age(timestamp '2020/1/11',timestamp '1998/4/1'));  -- 10