关于PostgreSQL的笔记1
序列操作
setval函数的第三个参数
在初始化时要注意 is_called。
在进行初始化的时候,将其设为 false。
关于指数
因为还没有完全理解,所以要逐渐学习,根据需要。
当设置了主键或唯一性指定时,一意索引会自动创建。
在PostgreSQL中,自动创建索引的条件——sternheller的日志
一意索引是一种在数据库中用于确保数据完整性的机制。它通过禁止重复值的插入来保证唯一性,并且可以提高检索数据的效率。请访问以下链接了解更多关于一意索引的信息:https://www.postgresql.jp/document/8.3/html/indexes-unique.html
索引类型 (suǒ
似乎有四种类型。
默认的是平衡树索引,用于缓存。
这个B树似乎可以指定顺序。
「如何有效利用PostgreSQL索引 TECHSCORE BLOG」是一篇关于在PostgreSQL中如何高效利用索引的文章。
反模式
暫時先只記住三個大概就好
-
- whereで関数を使う時には注意
-
- indexは必要悪とも考えられる
- 2キーインデックスを有効活用するのがよい
PostgreSQL反模式:索引相关的三大问题 – Qiita
http://qiita.com/masudakz/items/6a9cfa1db7ab59ea75aa
Serial型和sequence型
如果需要定义序列,串行类型会更容易,但实现方式是相同的。
如果需要更精细的控制,可能选择序列。
PostgreSQL – 使用PostgreSQL的serial类型的缺点(63038) | teratail
技术/PostgreSQL/后置”serial”设置方法备注 – Glamenv-Septzen.net
https://www.glamenv-septzen.net/view/725
简言之,当设置为”serial”时,序列的生成和销毁会在后台与表格进行联动调整。
在句子中存在
加快SQL速度-简便的性能调优
http://www.geocities.jp/mickindex/database/db_optimize.html#LocalLink-exists
寻找在其他桌子上不存在的行。
要查找在其他表中不存在的行 – PostgreSQL笔记 – postgresql组
https://postgresql.g.hatena.ne.jp/pgsql/20110302
当从MySQL迁移到PostgreSQL时的概要备忘录。
嗯,原文章好像找不到了。。
-
- テーブル操作のトランザクション
-
- join の代わりに非相関サブクエリを積極的に使う
-
- with 句を使ってサブクエリに名前を付けられます
-
- カラムにも別名を付けられます
-
- insert 文でレコードを挿入したときに、id や created_at の値を返すことができます。
-
- 生成したシーケンスに対し、以下の関数が使用できます。
currval() … 現在の値を取得する
nextval() … 次の値を取得する (現在値が 1 増える)
setval() … 値を設定し直す
auto_increment は serial 型で、カラムオプションではなくデータ型
‘infinity’ ‘-infinity’ が使えます。
generate_series() とは、連続した整数を生成する関数です
再帰 SQL とは、1 回のクエリで、1 つのテーブルに何度も select 文を実行するような機能です。
インデックスを作るとき、全部の行ではなく、条件に一致した行にだけインデックスをつけることができます。
インデックス作成時に、カラム名ではなく任意の式を指定できます。 これを「式インデックス」といいます (昔は「関数インデックス」と呼ばれてたようです)。
集約関数のひとつである array_agg() を使えば、1 : N のまま取り出せます。
json_agg() を使うと、より複雑なデータ構造で取り出せます。
1カラムに複数の値を設定できる。Relational 的にはどうなの?と言われそうだが、実際便利なので仕方ない。
JSON を表すデータ型。Relational 的にはどうなの?と言われそうだが、超絶に便利なので仕方ない。
Listen/Notify Observer パターンとか、PubSub とか。
別システムの DB や CSV ファイルが、あたかもテーブルかのようにアクセスできる。
PostGIS 位置情報を扱うときの定番。近距離を扱うだけなら必要ないかもしれないけど、たとえば東京-北京間の距離を計算するときは地球が楕円体であることを考慮する必要がある。そういうのをやってくれるライブラリ。