【PostgreSQL】Snowflake と PostgreSQL の違い

■ はじめに

Local開発環境はPostgreSQLで
本番環境はSnowflakeで
DB(DWH)間には、DBTで吸収しているが
時にそれでも違いでエラーになる場合があったので
原因をメモっておく

目次

【0】データ準備
 1)PostgreSQL環境
 2)使用データ
【1】WHERE句でエイリアスを使用した場合
【2】SELECT文の最後にカンマを入れた場合
【3】Parquetファイルのロードのサポート状況

【0】データ準備

1)PostgreSQL環境

* PostgreSQL15を想定

https://www.db-fiddle.com/

2)使用データ

PostgreSQL

CREATE TABLE member (
  id       INT,
  name     VARCHAR(50),
  gender     VARCHAR(1),
  country_code     VARCHAR(3),
  class    VARCHAR(10),
  updated_date    DATE
);

INSERT INTO member (id,name,gender,country_code,class,updated_date) VALUES
  (1,'Mike','m','USA','bronze','2024-09-14'),
  (2,'Tom',NULL,'GBR','gold','2024-09-14'),
  (3,'Smith','f',NULL,'silver','2024-09-14'),
  (4,'Ken',NULL,'JPN','gold','2024-09-14'),
  (5,'Jack','m','UKR','gold','2024-09-14'),
  (6,'Henry','m','AUS','bronze','2024-09-14'),
  (7,'Sophia','f','JPN','platinum','2024-09-14'),
  (8,'George','m','USA',NULL,'2024-09-14'),
  (9,'Lily','f','JPN','bronze','2024-09-14'),
  (10,'Daisy','f','USA','platinum','2024-09-14')
;

【1】WHERE句でエイリアスを使用した場合

Snowflake PostgreSQL
OK Error

PostgreSQL

SELECT
  gender AS g,
  class AS c
FROM
  member
WHERE
  g = 'm' -- Query Error: error: column "g" does not exist
  -- gender = 'm' -- OK
GROUP BY
  g, c
;

【2】SELECT文の最後にカンマを入れた場合

Snowflake PostgreSQL
OK Error

PostgreSQL

SELECT
  id,
  name,
  gender,
  country_code,
  class,
  updated_date, -- 最後にカンマ
  -- updated_date -- カンマを外せばPostgreSQLでも動く
FROM
  member
WHERE
  gender = 'm'
;

【3】Parquetファイルのロードのサポート状況

CSV については、Snowflake/PostgreSQLともにサポートしているが
Parquetについては、PostgreSQLはサポートされていない
ちなみに、Redshiftならサポートしている。

詳細は、以下の関連記事を参照のこと

PostgreSQL】COPY コマンド ~ COPY FROM / TO ~
https://dk521123.hatenablog.com/entry/2020/06/11/112650
Amazon Redshift ~ COPY コマンド ~
https://dk521123.hatenablog.com/entry/2021/07/21/214248

Snowflake PostgreSQL
OK(Supported) Unsupported

関連記事

Snowflake ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/02/130111
Snowflake ~ 入門編 / Hello world
https://dk521123.hatenablog.com/entry/2021/11/22/212520
PostgreSQL】COPY コマンド ~ COPY FROM / TO ~
https://dk521123.hatenablog.com/entry/2020/06/11/112650
Amazon Redshift ~ COPY コマンド ~
https://dk521123.hatenablog.com/entry/2021/07/21/214248