PostgreSQL 與 Kingbase 的差異對比


近日,公司的某軟件產品——原本使用 PostgreSQL 數據庫——需要支持人大金倉 (Kingbase) 數據庫。據了解,Kingbase 是基於 開源數據庫 PostgreSQL 開發的,大部分功能與 PostgreSQL兼容。Kingbase 8 是基於 PostgreSQL 9.6 的。本文列舉發現的 PostgreSQL 9.6 與 Kingbase 8 的差異對比。

 

1 JDBC

 

postgresql 9.6

kingbase 8

driver_class

org.postgresql.Driver

com.kingbase8.Driver

url

jdbc:postgresql://127.0.0.1:5432/postgres

jdbc:kingbase8://127.0.0.1:54321/kingbase

jdbc 的 jar

postgresql.jdbc-9.0.jar

 

<dependency>

  <groupId>org.postgresql</groupId>

  <artifactId>postgresql.jdbc</artifactId>

  <version>9.0</version>

</dependency>

kingbase8-8.2.0.jar

<dependency>

  <groupId>com.kingbase8</groupId>

  <artifactId>kingbase8-jdbc</artifactId>

  <version>8.2.0</version>

</dependency>

hibernate 的jar

hibernate-5.0.12.jar

<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate</artifactId>

  <version>5.0.12</version>

</dependency>

hibernate-3.6.0-dialect-1.0.jar

<dependency>

<groupId>com.kingbase</groupId>

<artifactId>hibernate-3.6.0-dialect</artifactId>

<version>1.0</version>

</dependency>

hibernate方言

org.hibernate.dialect.PostgreSQL9Dialect

org.hibernate.dialect.Kingbase8Dialect

 

這里127.0.0.1 表示本地的ip地址。

5432 是postgresql的默認端口;54321則是達夢的默認端口。

postgres 是postgresql默認的數據庫名,kingbase是Kingbase默認的數據庫名。

這些參數可根據實際調整。

 

2 命令程序

postgresql 9.6

kingbase 8

pgbench

kbbench

postgres

kingbase

psql

ksql

pg_archivecleanup

sys_archivecleanup

pg_basebackup

sys_basebackup

pg_bulkload

sys_bulkload

pg_config

sys_config

pg_controldata

sys_controldata

pg_ctl

sys_ctl

pg_dump

sys_dump

pg_dumpall

sys_dumpall

pg_hm

sys_hm

pg_isready

sys_isready

pglogical_create_subscriber

syslogical_create_subscriber

pg_receivexlog

sys_receivexlog

pg_recvlogical

sys_recvlogical

pg_resetxlog

sys_resetxlog

pg_restore

sys_restore

pg_rewind

sys_rewind

pg_rman

sys_rman

pg_test_fsync

sys_test_fsync

pg_test_timing

sys_test_timing

pg_upgrade

sys_upgrade

pg_xlogdump

sys_xlogdump

 

可以看到,這里kingbase只是將postgresql 的表的前綴從 pg 改成了 sys 或者 kb。

 

3 系統表和視圖

postgresql 9.6

kingbase 8

pg_aggregate

sys_aggregate

pg_am

sys_am

pg_amop

sys_amop

pg_amproc

sys_amproc

pg_attrdef

sys_attrdef

pg_attribute

sys_attribute

pg_authid

sys_authid

pg_auth_members

sys_auth_members

pg_cast

sys_cast

pg_class

sys_class

pg_collation

sys_collation

pg_constraint

sys_constraint

pg_conversion

sys_conversion

pg_database

sys_database

pg_db_role_setting

sys_db_role_setting

pg_default_acl

sys_default_acl

pg_depend

sys_depend

pg_description

sys_description

pg_enum

sys_enum

pg_event_trigger

sys_event_trigger

pg_extension

sys_extension

pg_foreign_data_wrapper

sys_foreign_data_wrapper

pg_foreign_server

sys_foreign_server

pg_foreign_table

sys_foreign_table

pg_index

sys_index

pg_inherits

sys_inherits

pg_init_privs

sys_init_privs

pg_language

sys_language

pg_largeobject

sys_largeobject

pg_largeobject_metadata

sys_largeobject_metadata

pg_namespace

sys_namespace

pg_opclass

sys_opclass

pg_operator

sys_operator

pg_opfamily

sys_opfamily

pg_partitioned_table

sys_partitioned_table

pg_pltemplate

sys_pltemplate

pg_policy

sys_policy

pg_proc

sys_proc

pg_publication

sys_publication

pg_publication_rel

sys_publication_rel

pg_range

sys_range

pg_replication_origin

sys_replication_origin

pg_rewrite

sys_rewrite

pg_seclabel

sys_seclabel

pg_sequence

sys_sequence

pg_shdepend

sys_shdepend

pg_shdescription

sys_shdescription

pg_shseclabel

sys_shseclabel

pg_statistic

sys_statistic

pg_statistic_ext

sys_statistic_ext

pg_subscription

sys_subscription

pg_subscription_rel

sys_subscription_rel

pg_tablespace

sys_tablespace

pg_transform

sys_transform

pg_trigger

sys_trigger

pg_ts_config

sys_ts_config

pg_ts_config_map

sys_ts_config_map

pg_ts_dict

sys_ts_dict

pg_ts_parser

sys_ts_parser

pg_ts_template

sys_ts_template

pg_type

sys_type

pg_user_mapping

sys_user_mapping

System Views

sysstem Views

pg_available_extensions

sys_available_extensions

pg_available_extension_versions

sys_available_extension_versions

pg_config

sys_config

pg_cursors

sys_cursors

pg_file_settings

sys_file_settings

pg_group

sys_group

pg_hba_file_rules

sys_hba_file_rules

pg_indexes

sys_indexes

pg_locks

sys_locks

pg_matviews

sys_matviews

pg_policies

sys_policies

pg_prepared_statements

sys_prepared_statements

pg_prepared_xacts

sys_prepared_xacts

pg_publication_tables

sys_publication_tables

pg_replication_origin_status

sys_replication_origin_status

pg_replication_slots

sys_replication_slots

pg_roles

sys_roles

pg_rules

sys_rules

pg_seclabels

sys_seclabels

pg_sequences

sys_sequences

pg_settings

sys_settings

pg_shadow

sys_shadow

pg_stats

sys_stats

pg_tables

sys_tables

pg_timezone_abbrevs

sys_timezone_abbrevs

pg_timezone_names

sys_timezone_names

pg_user

sys_user

pg_user_mappings

sys_user_mappings

pg_views

sys_views

 

可以看到,這里 kingbase只是將postgresql 的表的前綴從 pg 改成了 sys

 

4 創建函數的語法

差異項/數據庫

postgresql 9.6

kingbase 8

函數定義

create or replace function f(a int)                   
returns int as
$$
begin
    return 0;
end;
$$  language plpgsql;

create or replace internal function f(a int)                   
returns int as
$$
begin
    return 0;
end;
$$  language plsql;

函數中聲明變量

create or replace function f(a int)                   
returns int as
declare  a int;
declare  b varchar(32);
$$
begin
    return 0;
end;
$$  language plpgsql;

create or replace internal function f(a int)                   
returns int as
$$
declare
  
a int;
   b varchar(32);
begin
    return 0;
end;
$$  language plsql;

5 其他要注意的事項

如果需要程序保持對postgresql的兼容性,需要在kingbase 的配置文件kingbase.conf 中修改或新增下面幾個參數:

char_default_type = 'char'

ora_func_style = false

ora_numop_style = false

ora_input_emptystr_isnull = false

ora_plsql_style = false

ora_date_style = 'off'

ora_format_style = 'off'

 

下面是這幾個參數的含義。

參數

含義

char_default_type

VARCHAR 類型的長度單位。

 

char 表示以字符位單位,byte表示以字節為單位。

ora_func_style

設置兼容Oracle函數行為,默認為true啟用狀態。當設置true時, sequence.nextval兼容Oracle的Sequence偽列行為。

比如,SELECT SEQ.NEXTVAL AS A, SEQ.NEXTVAL AS B FROM DUAL,結果A B

值相同。 ltrim/rtrim/btrim兼容Oracle對應函數行為,最長的只包含characters只能是

一個字符。 textcat兼容Oracle字符串連接NULL時候,結果為字符串本身。

regexp_replace兼容Oracle該函數行為,regexp_replace參數中有NULL出現,當做

空串處理。 當關閉(false)ora_func_style時,上述函數表現為原有形式。

ora_numop_style

是否兼容oracle 數學運算符的用法。默認為true。

ora_input_emptystr_isnull

設置空串輸入的輸入形式(空串或NULL)及部分函數返回值空串輸出形式(空串或NULL),默認為true啟用狀態。當啟用(true)ora_input_emptystr_isnull時, 若輸入空串,則空串將變成NULL的形式輸入。

ora_plsql_style

是否是oracle的plsql風格。默認是true。

ora_date_style

是否是oracle的日期風格。默認是true。

ora_format_style

是否是oracle的格式風格。默認是true。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM