

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon Redshift 和 PostgreSQL
<a name="c_redshift-and-postgres-sql"></a>

**Topics**
+ [Amazon Redshift 和 PostgreSQL JDBC 和 ODBC](c_redshift-postgres-jdbc.md)
+ [以不同方式建置的功能](c_redshift-sql-implementated-differently.md)
+ [不支援的 PostgreSQL 功能](c_unsupported-postgresql-features.md)
+ [不支援的 PostgreSQL 資料類型](c_unsupported-postgresql-datatypes.md)
+ [不支援的 PostgreSQL 函數](c_unsupported-postgresql-functions.md)

Amazon Redshift 是以 PostgreSQL 為基礎。在設計和開發您的資料倉儲應用程式時，您必須知道 Amazon Redshift 與 PostgreSQL 之間有多項重要的差異。

Amazon Redshift 是專門針對線上分析處理 (OLAP) 和商業智慧 (BI) 應用所設計的，這些應用需要對龐大的資料集進行複雜的查詢。由於 Amazon Redshift 是用來滿足極為不同的需求，因此所使用的專業資料儲存體架構和查詢執行引擎，和 PostgreSQL 實作完全不同。例如，線上交易處理 (OLTP) 應用程式通常將資料儲存在列中，而 Amazon Redshift 則把資料儲存在欄中，並使用專門的資料壓縮編碼來實現最佳記憶體使用和磁碟 I/O。為了提高效能，一些適合較小規模 OLTP 處理的 PostgreSQL 功能 (例如次要索引和高效的單列資料操作操作) 已被省略。

如需 Amazon Redshift 資料倉儲系統架構的詳細說明，請參閱[Amazon Redshift 架構](c_redshift_system_overview.md)。

PostgreSQL 9.x 包含了一些 Amazon Redshift 未支援的功能。此外，Amazon Redshift SQL 和 PostgreSQL 之間有幾項重要的差異，是您必須知道的。本節重點介紹了 Amazon Redshift 和 PostgreSQL 之間的差異，並提供開發資料倉儲的指導方針，以充分善用 Amazon Redshift SQL 實作。

# Amazon Redshift 和 PostgreSQL JDBC 和 ODBC
<a name="c_redshift-postgres-jdbc"></a>

 由於 Amazon Redshift 是以 PostgreSQL 為基礎，因此我們先前建議使用 JDBC4 Postgresql 驅動程式版本 8.4.703 和 psqlODBC 版本 9.x 驅動程式。如果您目前正在使用這些驅動程式，我們建議今後移至新的 Amazon Redshift 專屬驅動程式。如需驅動程式和設定連線的相關資訊，請參閱《Amazon Redshift 管理指南》**中的[適用於 Amazon Redshift 的 JDBC 和 ODBC 驅動程式](https://docs.aws.amazon.com/redshift/latest/mgmt/configuring-connections.html#connecting-drivers)。

使用 JDBC 擷取龐大的資料集時，為避免發生用戶端記憶體不足的錯誤，您可以藉由設定 JDBC 擷取大小的參數，來讓用戶端透過批次方式擷取資料。如需詳細資訊，請參閱[設定 JDBC 擷取大小參數](set-the-JDBC-fetch-size-parameter.md)。

Amazon Redshift 無法辨識 JDBC maxRows 參數。請改為指定 [LIMIT](r_ORDER_BY_clause.md#order-by-clause-limit) 子句來限制結果集。您也可以使用 [OFFSET](r_ORDER_BY_clause.md#order-by-clause-offset) 子句，來跳到結果集中的指定起點。

# 以不同方式建置的功能
<a name="c_redshift-sql-implementated-differently"></a>

許多的 Amazon Redshift SQL 語言元素具有不同的效能特性，而且所使用的語法和語意，也和同等 PostgreSQL 實作非常不同。

**重要**  
請勿假設 Amazon Redshift 和 PostgreSQL 共通的元素具有相同的語意。請務必參考《Amazon Redshift 開發人員指南》**的 [SQL 命令](c_SQL_commands.md)，以了解細微的差異。

一個特別的例子是 [VACUUM](r_VACUUM_command.md) 命令，這是用來清理和重整資料表。VACUUM 具有不同的功能，而且使用與 PostgreSQL 版本不同的一組參數。如需在 Amazon Redshift 中使用 VACUUM 的詳細資訊，請參閱[清空資料表](t_Reclaiming_storage_space202.md)。

資料庫管理的功能和工具也經常有所不同。例如，Amazon Redshift 會維持一組系統資料表和檢視，這些項目提供關於系統運作狀況的資訊。如需詳細資訊，請參閱[SYS 監控檢視](serverless_views-monitoring.md)。

下列清單包含了一些 SQL 功能的範例，這些功能在 Amazon Redshift 中以不同的方式建置。
+  [CREATE TABLE](r_CREATE_TABLE_NEW.md) 

  Amazon Redshift 不支援資料表空間、資料表分割、繼承和某些限制。CREATE TABLE 的 Amazon Redshift 實作可讓您定義資料表的排序與分佈演算法，以實現最佳化的平行處理。

  Amazon Redshift Spectrum 支援使用 [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md) 命令來分割資料表。
+  [ALTER TABLE](r_ALTER_TABLE.md) 

  僅支援 ALTER COLUMN 動作的子集。

  ADD COLUMN 支援在每個 ALTER TABLE 陳述式中只新增一欄。
+  [COPY](r_COPY.md) 

  Amazon Redshift COPY 是高度專門的命令，可用來從 Amazon S3 儲存貯體和 Amazon DynamoDB 資料表載入資料，以便於自動壓縮作業的進行。如需詳細資訊，請參閱 [在 Amazon Redshift 中載入資料](t_Loading_data.md) 區段和 COPY 指令參考。
+  [VACUUM](r_VACUUM_command.md) 

  VACUUM 所使用的參數完全不同。例如，PostgreSQL 中的預設 VACUUM 操作，只會回收空間，以供重複使用；但是，Amazon Redshift 中預設的 VACUUM 操作為 VACUUM FULL，這項操作會回收磁碟空間，並將所有列重新排序。
+ 在比較字串值時，會忽略 VARCHAR 值中多餘的空格。如需詳細資訊，請參閱[多餘空格的意義](r_Character_types.md#r_Character_types-significance-of-trailing-blanks)。

# 不支援的 PostgreSQL 功能
<a name="c_unsupported-postgresql-features"></a>

在 Amazon Redshift 中不支援下列的 PostgreSQL 功能。

**重要**  
請勿假設 Amazon Redshift 和 PostgreSQL 共通的元素具有相同的語意。請務必參考《Amazon Redshift 開發人員指南》**的 [SQL 命令](c_SQL_commands.md)，以了解細微的差異。
+ 不支援查詢工具 *psql*。支援 [Amazon Redshift RSQL](https://docs.aws.amazon.com/redshift/latest/mgmt/rsql-query-tool.html) 用戶端。
+ 資料表分割 (範圍與列表分割)
+ 資料表空間
+ Constraints
  + 唯一
  + 外部索引鍵
  + 主索引鍵
  + 檢查限制
  + 排除限制

  允許唯一、主索引鍵和外部索引鍵的限制，但這些只是參考資訊。系統不會強制執行這些限制，不過查詢規劃器會使用這些限制。
+ 繼承
+ PostgreSQL 系統欄

  Amazon Redshift SQL 不會隱含地定義系統欄。但是，下列 PostgreSQL 系統欄的名稱不能做為使用者定義欄的名稱使用：`oid`、`tableoid`、`xmin`、`cmin`、`xmax`、`cmax` 和 `ctid`。如需詳細資訊，請參閱 [https://www.postgresql.org/docs/8.0/static/ddl-system-columns.html](https://www.postgresql.org/docs/8.0/static/ddl-system-columns.html)。
+ 索引
+ Window 函式中的 NULLS 子句
+ 定序

  Amazon Redshift 不支援地區特定或使用者定義的定序句。請參閱 [定序序列](c_collation_sequences.md)。
+ 值表達式
  + 註標表達式
  + 陣列建構子
  + 列建構子
+ 觸發
+ 外部資料管理 (SQL/MED)
+ 資料表函式
+ 做為常數表使用的 VALUES 清單
+ 序列
+ 全文檢索搜尋
+ RULE 和 TRIGGER 許可。

  當您執行 GRANT ALL 或 REVOKE ALL 時，Amazon Redshift 會授予或撤銷這些許可，但 RULE 和 TRIGGER 許可是否存在，並不會對承授者的存取許可造成任何影響。

# 不支援的 PostgreSQL 資料類型
<a name="c_unsupported-postgresql-datatypes"></a>

一般而言，如果查詢嘗試使用不支援的資料類型 (包括明確或隱含轉換)，將會傳回錯誤。不過，使用不支援資料類型的某些查詢，將可在領導節點上執行，但無法在運算節點上執行。請參閱 [領導節點上所支援的 SQL 函數](c_sql-functions-leader-node.md)。

 如需支援的資料類型清單，請參閱 [資料類型](c_Supported_data_types.md)。

在 Amazon Redshift 中不支援下列的 PostgreSQL 資料類型。
+ 陣列
+ BIT、BIT VARYING
+ BYTEA
+ 複合類型
+ 列舉類型
+ 幾何類型 (Amazon Redshift 的幾何類型實作與 PostgreSQL 不同)
+ HSTORE
+ JSON
+ 網路位址類型
+ 數值類型
  + SERIAL、BIGSERIAL、SMALLSERIAL
  + MONEY
+ 物件識別碼類型
+ 虛擬類型
+ 範圍類型
+ 特殊字元類型
  + "char" - 單位元組的內部類型 (其中名為 char 的資料類型會用引號括住)。
  + name - 物件名稱的內部類型。

  如需這些類型的相關資訊，請參閱 PostgreSQL 文件中的 [Special Character Types](https://www.postgresql.org/docs/8.0/datatype-character.html)。
+ 文字搜尋類型
+ TXID\$1SNAPSHOT
+ UUID
+ XML

# 不支援的 PostgreSQL 函數
<a name="c_unsupported-postgresql-functions"></a>

許多未排除的函式具有不同的語意或用法。例如，某些支援的函式只會在領導節點上執行。此外，某些不支援的函式在領導節點上執行時，不會傳回錯誤。這些函數在某些情況中不會傳回錯誤的事實，不應視為 Amazon Redshift 支援這些函數。

**重要**  
請勿假設 Amazon Redshift 和 PostgreSQL 共通的元素具有相同的語意。請務必參考《Amazon Redshift 資料庫開發人員指南》**的 [SQL 命令](c_SQL_commands.md)，以了解細微的差異。

 如需詳細資訊，請參閱[領導節點上所支援的 SQL 函數](c_sql-functions-leader-node.md)。

在 Amazon Redshift 中不支援下列的 PostgreSQL 函數。
+ 存取權限查詢函式
+ 建議鎖函式
+ 彙總函數
  + STRING\$1AGG()
  + ARRAY\$1AGG()
  + EVERY()
  + XML\$1AGG()
  + CORR()
  + COVAR\$1POP()
  + COVAR\$1SAMP()
  + REGR\$1AVGX()、REGR\$1AVGY()
  + REGR\$1COUNT()
  + REGR\$1INTERCEPT()
  + REGR\$1R2()
  + REGR\$1SLOPE()
  + REGR\$1SXX()、REGR\$1SXY()、REGR\$1SYY()
+ 陣列函數和運算子
+ 備份控制函式
+ 註解資訊函式
+ 資料庫物件位置函式
+ 資料庫物件大小函式
+ 日期/時間函式與運算子
  + CLOCK\$1TIMESTAMP()
  + JUSTIFY\$1DAYS()、JUSTIFY\$1HOURS()、JUSTIFY\$1INTERVAL()
  + PG\$1SLEEP()
  + TRANSACTION\$1TIMESTAMP()
+ ENUM 支援函式
+ 幾何函式與運算子
+ 通用檔案存取函式
+ IS DISTINCT FROM
+ 網路位址函式與運算子
+ 數學函式
  + DIV()
  + SETSEED()
  + WIDTH\$1BUCKET()
+ 結果集傳回函式
  + GENERATE\$1SERIES()
  + GENERATE\$1SUBSCRIPTS()
+ 範圍函式與運算子
+ 復原控制函式
+ 復原資訊函式
+ ROLLBACK TO SAVEPOINT 函式
+ 結構描述可見性查詢函式
+ 伺服器發訊函式
+ 快照同步函式
+ 序列處理函式
+ 字串函數
  + BIT\$1LENGTH()
  + OVERLAY()
  + CONVERT()、CONVERT\$1FROM()、CONVERT\$1TO()
  + ENCODE()
  + FORMAT()
  + QUOTE\$1NULLABLE()
  + REGEXP\$1MATCHES()
  + REGEXP\$1SPLIT\$1TO\$1ARRAY()
  + REGEXP\$1SPLIT\$1TO\$1TABLE()
+ 系統目錄資訊函式
+ 系統資訊函數
  + CURRENT\$1CATALOG CURRENT\$1QUERY()
  + INET\$1CLIENT\$1ADDR()
  + INET\$1CLIENT\$1PORT()
  + INET\$1SERVER\$1ADDR() INET\$1SERVER\$1PORT()
  + PG\$1CONF\$1LOAD\$1TIME()
  + PG\$1IS\$1OTHER\$1TEMP\$1SCHEMA()
  + PG\$1LISTENING\$1CHANNELS()
  + PG\$1MY\$1TEMP\$1SCHEMA()
  + PG\$1POSTMASTER\$1START\$1TIME()
  + PG\$1TRIGGER\$1DEPTH()
  + SHOW VERSION()
+ 文字搜尋函式與運算子
+ 異動 ID 與快照函式
+ 觸發函數
+ XML 函式