■ はじめに
Local開発環境はPostgreSQLで 本番環境はSnowflakeで DB(DWH)間には、DBTで吸収しているが 時にそれでも違いでエラーになる場合があったので 原因をメモっておく なお、別記事で以下もある。
Snowflake と PostgreSQL の違い 〜 SQL / 日時 〜
https://dk521123.hatenablog.com/entry/2025/04/22/193809
目次
【0】データ準備 1)PostgreSQL環境 2)使用データ 【1】WHERE句でエイリアスを使用した場合 【2】SELECT文の最後にカンマを入れた場合 【3】Parquetファイルのロードのサポート状況 【4】information_schemaスキーマ 1)tablesビュー
【0】データ準備
1)PostgreSQL環境
* PostgreSQL15を想定
2)使用データ
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 |
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 |
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 |
【4】information_schemaスキーマ
* Snowflake/PostgreSQL どちらも存在するが、仕様上異なる部分もあるのでメモ
1)tablesビュー
* 指定されたデータベース内の各テーブルとビューの行が表示
Snowflake
https://docs.snowflake.com/ja/sql-reference/info-schema/tables
PostgreSQL
https://www.postgresql.jp/document/8.0/html/infoschema-tables.html
Column | Explanations | Snowflake | PostgreSQL |
---|---|---|---|
TABLE_TYPE | テーブル種類を示す | BASE TABLE/TEMPORARY TABLE/EXTERNAL TABLE/EVENT TABLE/VIEW/ MATERIALIZED VIEW | BASE TABLE/VIEW/LOCAL TEMPORARY |
関連記事
Snowflake ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/02/130111
Snowflake ~ 入門編 / Hello world ~
https://dk521123.hatenablog.com/entry/2021/11/22/212520
Snowflake と PostgreSQL の違い 〜 SQL / 日時 〜
https://dk521123.hatenablog.com/entry/2025/04/22/193809
【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