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

Oracle→Postgresqlデータ移行備忘録#1

Posted at

脱Oracleに向けて
OracleからPostgresqlに移行する際に
基本的に一括で直さなければいけない部分
(プロシージャなどはおいおい)
を備忘録的にまとめておく

1データ型の差異

CHAR、NCHARはすべてCHAR型になり、
VARCHAR2、NVARCHAR2すべてVARCHAR型となる。
LONG、CLOB、NCLOBはすべてTEXT型として扱う。

Postgresqlのto_char関数は戻り値がtext型となっているため、
インデックスが参照されないため要注意となっている。

数値型に関しては
OracleでいうNUMBER型が存在しないため、
用途に合わせて型を決める必要がある。
(雑にNUMERICにしがち)

OracleのDATE型はPostgresqlのDATE型、TIMESTAMP型と互換があり、
TIMESTAMP型はTIMESTAMP型とのみ互換がある。
Oracleで文字列や数値で日付を4桁や8桁などで扱っていた場合、
To_charでの型変換などに巻き込まれてしまうため、
データ移行の際にあらかじめDATE型としてデータを移行するのが
いいのかもしれない

ちなみにOracleのバイナリ型はPostgresqlでは
すべてBYTEAとなる

2よく使う構文の差異

疑似列

OracleではROWNUMで取得した表に対して連番を自動で振ってくれていたので

SELECT
	*
FROM
	XXXX
WHERE
	ROWNUM <= 10

で先頭10件の取得ができていたが、
Postgresqlではrow_number()やLIMITなどで再現する。

SELECT
	XXXX.*,
	(SELECT row_number() OVER(ORDER BY AAA) AS rownum
FROM
	XXXX
WHERE
	rownum <= 10
	
-------------------------------------
SELECT
	*
FROM
	XXXX
ORDER BY
	AAA
LIMIT 10
OFFSET 10

のようなsqlで再現する。
疑似列は移行の際に要注意となる

重複の削除

UNIQUE は DISTINCTに置き換える必要がある

もともとDISTINCTを使用している場合は置き換える必要はなし

SELECT DISTINCT * FROM XXXX

結合

Oracleで外部結合演算子(+)を使用している場合は
それぞれOUTER JOIN句に変換する必要がある

DECODE句

OracleのDECODE句は存在しないため

--oracle
SLECT DECODE(code, 1, 'AAA',
				   2, 'BBB',
				   3, 'CCC',
				   NULL)
FROM
	XXXX
	
--Postgresql
SLECT 
	CASE WHEN code = 1 THEN 'AAA'
	     WHEN code = 2 THEN 'BBB'
	     WHEN code = 3 THEN 'CCC'
	ELSE NULL
FROM
	XXXX
	
SLECT 
	CASE code 
		 WHEN  1 THEN 'AAA'
	     WHEN  2 THEN 'BBB'
	     WHEN  3 THEN 'CCC'
	ELSE NULL
FROM
	XXXX	

のような書き換えが必要になるため注意

NVL

NVL は COALESCE へ書き換える必要がある。
使い方はNVLと変わらない。

時刻関数

OracleのTO_DATEはPostgresqlにも存在するが、
時刻を切り捨てて日付のみで変換をしてしまう。
時刻まで必要な場合はTO_TIMESTAMP
日付のみでいい場合はTO_DATEと
状況に応じて使い分ける必要がある。

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