PostgreSQL regexp_split_to_array と regexp_split_to_table

regexp_split_to_array rgexp_split_to_table どちらも区切り文字で splitした結果を返すけど、
regexp_split_to_array は、配列、
regexp_split_to_table は、文字列集合

regexp_split_to_array

SELECT regexp_split_to_array('A,B,C', ',') AS item

regexp_split_to_table

SELECT regexp_split_to_table('A,B,C', ',') AS item

PostgreSQL 配列の操作

末尾に追加は、array_append関数

SELECT array_append(ARRAY['A', 'B'], 'C')

⇒['A', 'B', 'C']

先頭に挿入は、array_prepend関数

SELECT array_prepend('A', ARRAY['B', 'C'])

⇒['A', 'B', 'C']

インデックス指定の除去をする関数は存在しなく array_remove関数は指定する要素が見つかったものを
全て削除するため目的に合わない。
配列の slice を使うことで対応する。

slice を使った参照

末尾の抽出

SELECT (ARRAY['A', 'B', 'C'])[3:3]

⇒['C']
ARRAY型の tname という列名でサンプルを書くと

SELECT tname[array_length(tname, 1) : array_length(tname, 1)] FROM sampletable

先頭の抽出

SELECT (ARRAY['A', 'B', 'C'])[1:1]

⇒['A']
ARRAY型の tname という列名でサンプルを書くと

SELECT tname[1:1] FROM sampletable

先頭を除去

SELECT (ARRAY['A', 'B', 'C'])[2:array_length(ARRAY['A', 'B', 'C'], 1)]

⇒['B', 'C']
ARRAY型の tname という列名でサンプルを書くと

SELECT tname[2:array_length(tname, 1)] FROM sampletable


末尾を除去

SELECT (ARRAY['A', 'B', 'C'])[1 : array_length(ARRAY['A', 'B', 'C'], 1) - 1]

⇒ ['A', 'B']
ARRAY型の tname という列名でサンプルを書くと

SELECT tname[1:array_length(tname, 1) - 1] FROM sampletable

UPDATE でこのSELECTで書いた操作の句を右辺に書けば更新可能

array_to_string関数

SELECT array_to_string(ARRAY['A','B','C'],',');

⇒ A,B,C
整数配列も

SELECT array_to_string(ARRAY[1, 2, 3],',');

⇒ 1,2,3

PostgreSQLの配列型、簡単なサンプル

テーブルカラムに配列型を使う設計はあまりしない。
CREATE TABLE 文の書き方は、2通りある。
文字型の配列の場合、VARCHAR[] という書き方と '_' アンダーバーをつけて _VARCHAR とする方法

CREATE TABLE foo (
     id INTEGER NOT NULL,
     tname VARCHAR[] NOT NULL,
     CONSTRAINT foo_pkey PRIMARY KEY (id)
)

VARCHAR(10)[ ] とすれば、10文字を超える配列要素は格納できない
省略してVARCHAR[] とすれば文字数制限がない

CREATE TABLE foo (
     id INTEGER NOT NULL,
     tname _VARCHAR NOT NULL,
     CONSTRAINT foo_pkey PRIMARY KEY (id)
)

どちらも同じものを作ってくれる。
INSERT文とかも書き方は、2通りある。

INSERT INTO foo (id, tname)
VALUES(1, '{ "A", "B", "C" }' )
INSERT INTO foo (id, tname)
VALUES(2, ARRAY['D', 'E', 'F'] )

配列の長さを求める時は、array_length(配列名, 次元)

SELECT array_length(tname, 1) FROM foo 

配列インデックス指定で値をセットする時は、先頭が1始まり

UPDATE foo SET 
tname[1] = 'G'
WHERE id = 3

インデックス指定の抽出も同様で、配列数より大きい列番号を指定すると NULLが返る。

SELECT  tname[4] FROM samfoo 

WHERE句の条件で、配列の比較をする時は注意が必要
VARCHAR配列型で、任意の文字列を含む条件の時、

WHERE tname  @> ARRAY['A']  

VARCHAR配列型 tnameで、'A' を含むレコードを条件にする指定は
この書き方だと、
SQLエラー [42883]: ERROR: 演算子が存在しません: character varying @> text
となってしまう。
明示的な、比較値のキャストが必要で、以下のようにしないとならない

WHERE tname  @> ARRAY[ CAST('A' AS varchar) ] 

Mavenローカルリポジトリを移動した時のEclipse設定

Windows で通常、Maven のローカルリポジトリは、ユーザのディレクトリに配置されて、
C:\Users\{ユーザ}\.m2\repository
Eclipse もここを指すようになっているであろう。
WindowsアップデートをしているとCドライブ空き領域が少なくなってきて危険なので
他のドライブに Maven リポジトリを移動した時の Eclipse の設定
.m2 をフォルダ毎、全部移動したら、.m2 の直下に、settings.xml があるはずだ。
これを以下のように、新しいローカルリポジトリのパスを設定する。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                          http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository>ローカル・リポジトリのディレクトリ</localRepository>
  <servers>
    <server>
      <id>github</id>
      <username>XXXXXXXXXX</username>
      <password>xxxxxxxxxxxxxxxxxxxxxxxxx</password>
    </server>
  </servers>
</settings>

Eclipse の設定、Maven を開き、ユーザ設定の[参照] ボタンクリックで
移動した .m2 の下のsettings.xmlを指定して、ファイルを開く
上のように、localRepository に、移動先の .m2\repository を設定する。
settings.xmlを書き終えたら、「設定の更新」をクリックする。

statement図のパターン(1)

PlantUML statement図のサンプルを作っておくと
state as 句で、後からステータス名を割り当てれば良いし、
線を点線にするなども後で編集できる。
サンプルをいくつか用意しておけば、ステートの配置に悩むことも少ないであろう。
次の規則を覚えておけば良い。
 --> は下方向、-down-> と同じ、 ---> は線が長くなる。
 -> は右方向、-right-> と同じ、線を長くする書式はない。
 -up-> は上方向、--up-> と -up--> は線が長くなる
 -left-> は左方向

@startuml
skin rose
skinparam shadowing false
hide empty description

[*] -> A
A -up-> a
a --> A

A -> B
B -left-> A

B -up-> b
b --> B

B -> C
C -left--> B

C -up-> c
c --> C

C --> D
D -up[dashed]-> C

D --> d
d -up-> D

D -left-> E
E -> D

E --> e
e -up-> E

E -left-> F
F -> E

F --> f
f -up-> F
F -left-> [*]

@enduml

後で、
Aのステータス名を、「初期生成」としたければ、

state "初期生成" as A

activity図レーンの幅調整

以前書いたPlantUML Activity図で、業務フローを書いたもので、レーンの線が重なってしまうものがあった。
oboe2uran.hatenablog.com


この差戻し、修正後の戻る線がレーンの線と重なってしまうような場合、
レーンの幅を広げて対処する。⇒ skinparam で指定

でも、PlantUML 公式ページでは、
  「skinparam は現在非推奨であり、段階的に廃止されています。」
となっているので今後使える方法なのか怪しいが、

skinparam swimlaneWidth 400

のように宣言すると、

@startuml

skinparam swimlaneWidth 400

|A|
start
:新規作成;
|B|
while (検証) is (差戻し)
    |A|
    :修正;
    |B|
endwhile(OK)
:登録;
end

@enduml

と、スイムレーンの幅調整はできる。

VScode マークダウンプレビューの改行

<br/> を書かずに通常のテキストの改行で改行させる設定
ctrl+, で設定画面を開いたら、markdown preview と打ち込んで

Markdown Preview Breaks を表示する。
デフォルトは、チェックoffで false になっているので
これを true にする。

settins.jsons では以下のとおり。

"markdown.preview.breaks": false,