1
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?

More than 1 year has passed since last update.

PostgreSQL 備忘録

Last updated at Posted at 2021-12-12

Path

「コントロールパネル」
>「システムとセキュリティ」
>「システム」
>「システムの詳細設定」
>「システムのプロパテ画面の環境変数」
>「環境変数の画面のシステム環境変数(S)」
>「Path」

image.png

ログイン方法

$ psql -U postgres
パスワード

上手くいかないとき

psql: エラー: サーバに接続できませんでした: Connection refused (0x0000274D/10061)
        サーバはホスト "localhost" (::1) で稼動しており、
        また、ポート 5432 で TCP/IP 接続を受け付けていますか?
サーバに接続できませんでした: Connection refused (0x0000274D/10061)
        サーバはホスト "localhost" (127.0.0.1) で稼動しており、
        また、ポート 5432 で TCP/IP 接続を受け付けていますか?

解決策

pg_ctl -D "C:\Program Files\PostgreSQL\13\data" restart

postgresqlの再起動。

データベース作成

  • 「database_sample」というDBを作成する例
DROP DATABASE IF EXISTS database_sample;
CREATE DATABASE database_sample;

データベースの削除

DROP DATABASE テーブル名で削除できない場合

dropdb -U postgres database_sample

データベース一覧確認

¥l

データベースの変更

¥c DB名

A5M2を使う場合

  • DBごとに接続を追加する
    → DB「database_sample」と「database_sample2」を追加した例
  • MySQLではデータベースを「mysql」にすれば、追加したDBが一覧でみられるが、postgresqlはDBごとに接続先を追加しなければならない。
    image.png

上手くいかない時

症状 確認
CREATEしたDBがどこにも表示されない DBの接続先追加で、DB名をデフォルトの「postgres」にしていないか 追加したDB名にしないと表示されない。

テーブル作成

  • table_sampleを作成する例
DROP TABLE  IF EXISTS table_sample;
CREATE TABLE table_sample(
    id integer, 
    name varchar(10)
)

型の注意

項目 説明 備考
bit型 →boolean型 true or false bit型はあるが、defaultで0や1をいれるとエラーになる
INT(5) →INTEGER INT(5)のように長さをしていするとエラーになる

COLLATION

  • 各カラムに定義する。例)COLLATE "ja-x-icu"
  • INTEGER型にはつけられない
CREATE TABLE housework_works (
  works_id SERIAL NOT NULL,
  flag_display BOOLEAN DEFAULT TRUE,
  category_id INTEGER NOT NULL,
  housework_name VARCHAR(50) COLLATE "ja-x-icu" NOT NULL,

  PRIMARY KEY (works_id),
  FOREIGN KEY(category_id) REFERENCES housework_category(category_id)
);

 

AUTO INCRIMENT

  • AUTO INCRIMENTの記述はできない。代わりにSERIAL型を使う

シリアルキー

テーブルにSERIAL型でPRIMALY KEYに設定されている物がある場合、データ型Sequenceとして変数名が存在している。
この変数名は「テーブル名_列名_seq」というパターンで自動的に決められる

シリアルキーの確認

select*from cooking_ingredients_ingredients_id_seq;

シリアルキーの初期化

select setval ('cooking_ingredients_ingredients_id_seq', 1, false);

シリアルキーの値変更

下の例では現状の最大idを調べて、10に設定
次回は11から始まる。

select MAX(ingredients_id) from cooking_ingredients;
select setval ('cooking_ingredients_ingredients_id_seq', 10);

dump方法

dumpファイル作成方法
【基本】
##pg_dump -U postgres --format=p --file=バックアップファイルパス 対象のDB

【入力例 (Windows・Linux共通)】
pg_dump -U postgres --format=p --file=C:\test\test.sql sampledb
>pasword入力


リストア方法
【基本】
##createdb -U postgres リストア先のDB名
##psql -h localhost -U ユーザ名 -f DB名.sql リストア先のDB名

【入力例 (Windows・Linux共通)】
createdb -U postgres sampledb2
>pasword入力
psql -h localhost -U postgres -d sampledb2 -f C:\test\test.sql
>pasword入力

ポイント 説明
localhost ipアドレスは「ipconfig」で調べられる
DB名.dump フルパス指定のこと
リストア先のDB 予めDBは作成しておくこと。

##springbootで接続する際 build.gradle依存関係

build.gradle
dependencies {
	runtimeOnly 'org.postgresql:postgresql'
}

Springbootで接続する際 application.properties

application.properties
spring.jpa.database=POSTGRESQL
spring.datasource.url=jdbc:postgresql://localhost:5432/sample_table
spring.datasource.username=postgres
spring.datasource.password=passwordhogehoge
spring.jpa.open-in-view=True

日付の足算

本日+3日の例

CURRENT_DATE + INTERVAL '3DAY',

条件分岐文

次回予定ラベルを条件分岐させる

SELECT 
	A.history_id,
    C.category_name,
	B.housework_name,
    CURRENT_DATE + INTERVAL '3DAY',
    CASE WHEN A.lasttime_housework_date + B.interval_day = CURRENT_DATE THEN '本日'
         WHEN A.lasttime_housework_date + B.interval_day < CURRENT_DATE THEN '超過'
         WHEN A.lasttime_housework_date + B.interval_day > CURRENT_DATE THEN ''
    END AS nexttime_schedule_label
FROM
housework_history AS A 

うまくいかないとき

・ "本日"のようにダブルクウォートで囲うとエラーになる

SELECT句の指定フィールドに固定値を追加

SELECT
 id,
 name,
 'xx' as test 
FROM
 test_table 

代入 同じ値

INSERT INTO

INSERT INTO products (id, name, remark) VALUES
    (1, '一郎', '長男'),
    (2, '次郎', '次男'),
    (3, '三郎', '三男');

SELECT結果をINSERTする

全カラムを挿入する方法

INSERT INTO test1 SELECT*FROM test2;

カラムを指定する方法

INSERT INTO 宛先テーブル(col1,col2)
SELECT
    col1,
    col2
FROM
    test_table
WHERE
    id = 1

うまくいかない時

ポイント 説明 備考
SELECT"またはその近辺で構文エラー VALUS(SELECT*

正規表現

ポイント 説明 例解説
~ 正規表現一致 WHERE id ~ '^[0-9]' 先頭数字
!~ 正規表現不一致 WHERE id !~ '^[0-9]' 先頭数字以外
1
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
1
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?