ユーザ用ツール

サイト用ツール


it技術:データベース:postgresql:oracleからの移行

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
次のリビジョン両方とも次のリビジョン
it技術:データベース:postgresql:oracleからの移行 [2021/06/25 00:16] – [複合インデックスの指定方法] yajuadminit技術:データベース:postgresql:oracleからの移行 [2021/12/27 09:32] – [データ型] yajuadmin
行 6: 行 6:
  
 ^Oracleのデータ型^PostgreSQL^説明^備考^ ^Oracleのデータ型^PostgreSQL^説明^備考^
-|VARCHAR2(n)|CHARACTER VARYING(n)| 最大n文字の長さの文字列| +|VARCHAR2(n)|CHARACTER VARYING(n)| 最大n文字の長さの文字列|Oracleはバイト数、PostgreSQLは文字数
-|NUMBER|NUMERIC|最大1000桁、ユーザ指定精度|+|NUMBER|NUMERIC|最大1000桁、ユーザ指定精度|
 |DATE|TIMESTAMP| |DATEのままだと日付のみになる| |DATE|TIMESTAMP| |DATEのままだと日付のみになる|
 |SYSDATE|current_timestamp  \\ ※SQL92に従いnow()は使わない|現在の日付/時刻を取得する関数|HH24MMSS → HH24MISS| |SYSDATE|current_timestamp  \\ ※SQL92に従いnow()は使わない|現在の日付/時刻を取得する関数|HH24MMSS → HH24MISS|
行 15: 行 15:
  
 === 注意点 === === 注意点 ===
 +OracleはVARCHAR2はバイト数、PostgreSQLはCHARACTER VARYINGは文字数となる。\\
 OracleのNUMBER型をPostgreSQLのNUMERIC型に単純に変更したが、これには弊害もある。\\ OracleのNUMBER型をPostgreSQLのNUMERIC型に単純に変更したが、これには弊害もある。\\
 整数しか入らないなら、素直にsmallint型やinteger型にする方がいいかも。 整数しか入らないなら、素直にsmallint型やinteger型にする方がいいかも。
行 205: 行 206:
 WHERE AA = xxx AND AB = xxx AND AC = xxx AND AD = xxx WHERE AA = xxx AND AB = xxx AND AC = xxx AND AD = xxx
 </code> </code>
 +
 +==== ダブルパイプ結合したインデックスは作成できない ====
 +PostgreSQLではカラムをダブルパイプ結合するとインデックスが効かなくなります。\\
 +Oracleではダブルパイプ結合したインデックス自体を作成できましたが、PostgreSQLではできません。\\
 +PostgreSQLでは単一または複合インデックスを作成し、行値式を使用することでインデックスを効くようにします。\\
 +
 +<code>
 +SELECT * FROM TEST
 +WHERE 
 +(UPDATE_DATE, UPDATE_TIME) >  ('20190218','141435') AND
 +(UPDATE_DATE, UPDATE_TIME) <= ('20190219','141435')
 +</code>
 +※Oracleの行値式は等価(=,!=,IN)しか対応していないが、PostgreSQLでは範囲条件(>, <=など)も対応している。なお、SQLServerは未だに行値式をサポートしていない。
 ==== ユーザ定義関数 ==== ==== ユーザ定義関数 ====
 === NVL関数 === === NVL関数 ===
it技術/データベース/postgresql/oracleからの移行.txt · 最終更新: 2023/12/18 13:16 by yajuadmin