迁移 Oracle 到 PostgreSQL: 会话参数

七月 25, 2023

Oracle 可以使用ALTER SESSION命令在会话级别修改某些数据库参数和配置选项。但是,并非所有 Oracle 配置选项和参数都可以按会话进行修改。

Oracle 用法

若要查看可为特定会话范围设置的所有可配置参数的列表,请查询视图v$parameter,如以下示例所示。

SELECT NAME, VALUE FROM V$PARAMETER WHERE ISSES_MODIFIABLE='TRUE';

例子

更改当前会话的代码页参数NLS_LANAUGE

alter session set nls_language='SPANISH'
Sesin modificada.

alter session set nls_language='ENGLISH';
Session altered.

alter session set nls_language='FRENCH';
Session modifiΘe.

alter session set nls_language='GERMAN';
Session wurde geΣndert.

使用会话参数NLS_DATE_FORMAT指定从数据库返回的日期值的格式。

select sysdate from dual;
SYSDATE
SEP-09-17

alter session set nls_date_format='DD-MON-RR';
Session altered.

select sysdate from dual;
SYSDATE
09-SEP-17

alter session set nls_date_format='MM-DD-YYYY';
Session altered.

select sysdate from dual;
SYSDATE
09-09-2017

alter session set nls_date_format='DAY-MON-RR';
Session altered.

有关详细信息,请参阅 Oracle 文档中的更改参数文件中的参数值

PostgreSQL 用法

PostgreSQL 提供了使用SET SESSION命令配置的会话级可修改的参数。使用SET SESSION配置参数仅适用于当前会话。要查看可以使用SET SESSION设置的参数列表,可以查询pg_settings

SELECT * FROM pg_settings where context = 'user';

查找以下常用会话参数:

  • client_encoding配置连接的客户端字符集。
  • force_parallel_mode强制对会话使用并行查询。
  • lock_timeout设置等待数据库锁定释放的最长允许持续时间。
  • search_path设置非架构限定的对象名称的架构搜索顺序。
  • transaction_isolation设置会话的当前事务隔离级别。

例子

更改已连接会话的时区。

set session DateStyle to POSTGRES, DMY;
SET

select now();
now
Sat 09 Sep 11:03:43.597202 2017 UTC
(1 row)

set session DateStyle to ISO, MDY;
SET

select now();
now
2017-09-09 11:04:01.3859+00
(1 row)

总结

下表包括部分参数列表,旨在突出显示 Oracle 和 PostgreSQL 中的各种会话级配置参数。并非所有参数都可直接比较。

参数用途 Oracle PostgreSQL
配置时间和日期格式 ALTER SESSION SET nls_date_format = 'dd/mm/yyyy hh24:mi:ss'; SET SESSION datestyle to 'SQL, DMY';
配置当前默认模式或数据库 ALTER SESSION SET current schema='schema_name' SET SESSION SEARCH_PATH TO schemaname;
为特定错误生成跟踪 ALTER SESSION SET events '10053 trace name context forever'; 不适用
为 SQL 语句运行跟踪 ALTER SESSION SET sql_trace=TRUE;
ALTER SYSTEM SET EVENTS 'sql_trace [sql:&&sql_id] bindd=true, wait=true';
不适用
修改索引访问的查询优化器开销 ALTER SESSION SET optimizer_index_cost_adj = 50 SET SESSION random_page_cost TO 6;
修改查询优化器行访问策略 ALTER SESSION SET optimizer_mode=all_rows; 不适用
分配给排序操作的内存 ALTER SESSION SET sort_area_size=6321; SET SESSION work_mem TO '6MB';
分配给哈希连接的内存 ALTER SESSION SET hash_area_size=1048576000; SET SESSION work_mem TO '6MB'

有关详细信息,请参阅 PostgreSQL 文档中的 SET