Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

データベース

RDBMS製品ごとの特徴的な差異

RDBMS製品ごとの特徴的な差異をまとめた資料とかないんだろうか?たとえば以下。 # 項目 Oracle SQL Server PostgreSQL MySQL HiRDB 1 空文字列とNULLの区別 区別しない 区別する 区別する 区別する 区別する 2 DDLがロールバックできるか(トランザクション…

Webアプリケーションにおける誤った悲観ロックの実装方法(Q&A形式)

※(2024/02/11 追記)本記事内で「悲観排他」「悲観ロック」と表記がゆれているが、いずれも悲観的ロック(optimistic locking)を使った排他制御(mutual exclusion)のことを意味している。 Q1: ググると「悲観排他の実装にはSELECT FOR UPDATEを使え」と書い…

Webアプリケーションにおける誤った楽観ロックの実装方法(Q&A形式)

Q1: 排他キーに時刻を使わないほうがいいのはなぜ? A1: 以下のようなケースで楽観ロックが働かず更新が後勝ちになってしまうため。 https://qiita.com/NagaokaKenichi/items/73040df85b7bd4e9ecfc でいう「同一秒に複数の操作」というのがこれにあたる。 最…

Amazon RDSのマイナーバージョン自動アップグレード機能の有効・無効はDBMSエンジンごとにデフォルト値が異なる

Amazon RDSのマイナーバージョン自動アップグレードについてググると「デフォルトだと有効」という記載をしているページがいくつか見つかる*1*2。 実際にAmazon RDSのメニューから[データベースの作成]-[追加設定]-[マイナーバージョン自動アップグレードの…

PostgreSQLがORDBMSってどういうこと?

GAITの試験問題サンプル*1を見ていて気付いたんだけど、PostgreSQLのオフィシャルサイトではPostgreSQLはobject-relational database systemだと謳っている*2。これってどういうことなの?Wikipediaにあるとおり*3普通のrelational databaseなのでは?と思っ…

JDBCドライバがサーバとの1回の通信で取得する行数のデフォルト値

Oracle 11.2は10行。*1 By default, when Oracle JDBC runs a query, it retrieves a result set of 10 rows at a time from the database cursor. This is the default Oracle row fetch size value. Oracle 21は10行。*2 By default, when Oracle JDBC run…

EDB EnterpriseとOracleの仮想環境での価格比較例ってないのかな

EnterpriseDB EDB Enterprise Plan*1は、仮想環境で使っても、データベースサーバに割り当てた仮想CPUコアのみが課金対象となる*2。 一方、Oracle Databaseを仮想環境上で使う場合、Oracle製品が稼働する物理サーバーの全てのプロセッサーがライセンスカウン…

監査証跡の記録をビジネスロジックとして実装する理由

多くのRDBMSでは、それぞれ監査証跡を記録する機能を備えている*1*2*3。一方で、RDBMSの監査証跡機能を利用せず、ビジネスロジックとして証跡を取得する(監査証跡を機能要件として定める)ケースもある。そこで、RDBMSの監査証跡機能を利用しない・できない…

An error in pgbench: invalid command in command "setrandom"

Background: I tried to run the following transaction script on pgbench contained in PostgreSQL 12: \set nbranches 1 * :scale \set ntellers 10 * :scale \set naccounts 100000 * :scale \setrandom aid 1 :naccounts \setrandom bid 1 :nbranches \…

SQLite3 で「データベースとシステム開発」の内容を(ちょっと)試してみる

「ソフトウェア開発技術者 データベースとシステム開発 基本テキスト」は 2005 年 4 月 15 日発行の第 2 版第 2 刷のもの。 CREATE DATABASE, あるいは CREATE SCHEMA 文は使えない。コマンドラインで "sqlite3 foo" としたときにデータベース名が決まってい…

SQL の予約語

SQL の予約語 "ORDER" が「受注」の訳語とまる被りなのでとても困る。