云服务器内容精选

  • 开发规范 如果用户在APP的开发过程中,使用了连接池机制,那么需要遵循如下规范: 如果在连接中设置了GUC参数,那么在将连接归还连接池之前,必须使用“SET SESSION AUTHORIZATION DEFAULT;RESET ALL;”将连接的状态清空。 如果使用了临时表,那么在将连接归还连接池之前,必须将临时表删除。 否则,连接池里面的连接就是有状态的,会对用户后续使用连接池进行操作的正确性带来影响。 应用程序开发驱动兼容性说明如表1所示。 表1 兼容性说明 驱动 兼容性说明 JDBC、Go、ODBC、libpq、Psycopg、ecpg 驱动前向兼容数据库,若需使用驱动与数据库同步增加的新特性,须升级数据库。 behavior_compat_options='proc_outparam_override' 重载参数仅在A兼容模式可用。 原则上,兼容性参数应在创建数据库后就设置,不应在使用过程中来回切换。 涉及使用以下场景的特性需要配合将JDBC驱动升级到503.1.0及以上的配套版本。 全密态内存解密逃生通道。 通过JDBC使用record、array、tableof嵌套自定义类型。 开启s2兼容性参数,设置sessiontimezone的合法性校验。 在多线程环境下使用驱动: JDBC驱动程序线程不是安全的,无法保证连接上的方法同步。由调用者同步对驱动程序的调用。 父主题: 应用程序开发教程
  • 调试 用户可以根据自己的需要,通过修改实例数据目录下的gaussdb.conf文件中特定的配置参数来控制日志的输出,从而更好的了解数据库的运行状态。 可调整的配置参数请参见表1。 表1 配置参数 参数名称 描述 取值范围 备注 client_min_messages 配置发送到客户端信息的级别。 DEBUG5 DEBUG4 DEBUG3 DEBUG2 DEBUG1 LOG NOTICE WARNING ERROR FATAL PANIC 默认值:NOTICE 设置级别后,发送到客户端的信息包含所设级别及以下所有低级别会发送的信息。级别越低,发送的信息越少。 log_min_messages 配置写到服务器日志里信息的级别。 DEBUG5 DEBUG4 DEBUG3 DEBUG2 DEBUG1 INFO NOTICE WARNING ERROR LOG FATAL PANIC 默认值:WARNING 指定某一级别后,写到日志的信息包含所有更高级别会输出的信息。级别越高,服务器日志的信息越少。 log_min_error_statement 配置写到服务器日志中错误SQL语句的级别。 DEBUG5 DEBUG4 DEBUG3 DEBUG2 DEBUG1 INFO NOTICE WARNING ERROR FATAL PANIC 缺省值:ERROR 所有导致一个特定级别(或者更高级别)错误的SQL语句都将记录在服务器日志中。 只有系统管理员可以修改该参数。 log_min_duration_statement 配置语句执行持续的最短时间。如果某个语句的持续时间大于或者等于设置的毫秒数,则会在日志中记录该语句及其持续时间。打开这个选项可以方便地跟踪需要优化的查询。 INT类型。 默认值:-1。 单位:毫秒。 设置为-1表示关闭这个功能。 只有系统管理员可以修改该参数。 log_connections/log_disconnections 配置是否在每次会话连接或结束时向服务器日志里打印一条信息。 on:每次会话连接或结束时向日志里打印一条信息。 off:每次会话连接或结束时不向日志里打印信息。 默认值:off。 - log_duration 配置是否记录每个已完成语句的持续时间。 on:记录每个已完成语句的持续时间。 off:不记录已完成语句的持续时间。 默认值:off 只有系统管理员可以修改该参数。 log_statement 配置日志中记录哪些SQL语句。 none:不记录任何SQL语句。 ddl:记录数据定义语句。 mod:记录数据定义语句和数据操作语句。 all :记录所有语句。 默认值: none 只有系统管理员可以修改该参数。 log_hostname 配置是否记录主机名。 on:记录主机名。 off:不记录主机名。 默认值:off 缺省时,连接日志只记录所连接主机的IP地址。打开这个选项会同时记录主机名。 该参数同时影响查看审计结果、PG_STAT_ACTIVITY和GUC参数log_line_prefix。 表1有关参数级别的说明请参见表2。 表2 日志级别参数说明 级别 说明 DEBUG[1-5] 提供开发人员使用的信息。5级为最高级别,以此类推,1级为最低级别。 INFO 提供用户隐含要求的信息。如在VACUUM VERBOSE过程中的信息。 NOTICE 提供可能对用户有用的信息。如长标识符的截断,作为主键一部分创建的索引。 WARNING 提供给用户的警告。如在事务块范围之外的COMMIT。 ERROR 报告导致当前命令退出的错误。 LOG 报告一些管理员感兴趣的信息。如检查点活跃性。 FATAL 报告导致当前会话终止的原因。 PANIC 报告导致所有会话退出的原因。 ODBC 父主题: 应用程序开发教程
  • 获取驱动包 根据不同版本的实例,下载不同版本的发布包,如表1所示。 表1 驱动包下载列表 版本 下载地址 V2.0-8.x 驱动包 驱动包校验包 为了防止软件包在传递过程或存储期间被恶意篡改,下载软件包时需下载对应的校验包对软件包进行校验,校验方法如下: 上传软件包和软件包校验包到虚拟机(Linux操作系统)的同一目录下。 执行如下命令,校验软件包完整性。 cat GaussDB _driver.zip.sha256 | sha256sum --check 如果回显OK,则校验通过。 GaussDB_driver.zip: OK
  • 基于ecpg开发 ecpg(embedded SQL C preprocessor for GaussDB Kernel)是一种用于C语言程序的嵌入式SQL预处理器。一个嵌入式SQL程序由一种普通编程语言编写的代码(此处为C语言)和SQL命令共同组成。要构建该程序,源代码(*.pgc)首先通过嵌入式SQL预处理器,将源代码转换成一个普通C语言程序(*.c),然后再通过编译器处理。转换过的ecpg应用通过嵌入式SQL库(ecpglib)调用libpq库中的函数,与GaussDB Kernel服务器使用普通的前端/后端协议通信。 嵌入式SQL程序是插入了数据库相关动作的特殊代码的C语言程序。这种特殊代码形式通常如下: EXEC SQL ...; 这些语句在语法上取代了一个C语句,可以出现在全局或者是一个函数中。嵌入式SQL语句遵循普通SQL代码的大小写敏感规则,也允许嵌套的C语言代码风格注释(SQL标准的一部分)。不过,程序的C语言部分遵循C语言程序的标准,不支持嵌套注释。 开发流程 ecpg组件介绍 ecpg预处理以及编译执行 管理数据库连接 执行SQL命令 查询结果集 关闭数据库连接 宿主变量 执行动态SQL语句 错误处理 预处理指令 使用库函数 SQL描述符区域 常用示例 ecpg与Pro*C兼容性对比 ecpg接口参考 父主题: 应用程序开发教程
  • JDBC兼容性包 从发布包中获取。包名为GaussDB-Kernel_数据库版本号_操作系统版本号_64bit_Jdbc.tar.gz。 解压后JDBC的驱动jar包: gsjdbc4.jar:主类名为“org.postgresql.Driver”,数据库连接的URL前缀为“jdbc:postgresql”,该驱动包适用于从PostgreSQL迁移业务的场景,驱动类和加载路径与迁移前保持一致,但接口支持情况不完全一致,未支持的接口需要业务侧进行调整。 gsjdbc200.jar:该驱动包适用于从Gauss200迁移业务的场景,驱动类和加载路径与迁移前保持一致,但接口支持情况不完全一致,未支持的接口需要业务侧进行调整。 opengaussjdbc.jar:主类名为“com.huawei.opengauss.jdbc.Driver”,数据库连接的URL前缀为“jdbc:opengauss”。如果遇到同一JVM进程内需要同时访问PostgreSQL及GaussDB的场景,请使用此驱动包。 各驱动包只是驱动类加载路径和url前缀不同,接口功能相同。 不能使用gsjdbc4的驱动包操作PostgreSQL数据库,虽然部分版本能够建连成功,但部分接口行为与PostgreSQL JDBC不同,可能导致未知错误。 不能使用PostgreSQL的驱动包操作 GaussDB数据库 ,虽然部分版本能够建连成功,但部分接口行为与GaussDB JDBC不同,可能导致未知错误。
  • ecpg兼容 ecpg提供使用URL连接方式的连接语法,不仅支持“gaussdb”,还兼容支持“postgresql”。 连接语法: EXEC SQL CONNECT TO target [AS connection-name] [USER user-name]; 其中target支持“postgresql”方式如下: tcp:postgresql://hostname[:port][/dbname][?options] unix:postgresql://hostname[:port][/dbname][?options]
  • 基于Psycopg开发 Psycopg是一种用于执行SQL语句的PythonAPI,可以为GaussDB数据库提供统一访问接口,应用程序可基于它进行数据操作。Psycopg2是对libpq的封装,主要使用C语言实现,既高效又安全。它具有客户端游标和服务器端游标、异步通信和通知、支持“COPY TO/COPY FROM”功能。支持多种类型Python开箱即用,适配GaussDB数据类型。通过灵活的对象适配系统,可以扩展和定制适配。Psycopg2兼容Unicode。 GaussDB数据库提供了对Psycopg2特性的支持,并且支持psycopg2通过SSL模式连接。 表1 Psycopg支持平台 操作系统 平台 Python版本 EulerOS V2.0SP5 ARM64位 x86_64位 3.8.5 SUSE 12.5 x86_64位 3.8.5 EulerOS V2.0SP9 ARM64位 x86_64位 3.7.4 EulerOS V2.0SP10、Kylin v10、UnionTech20 ARM64位 x86_64位 3.7.9 EulerOS V2.0SP11 ARM64位 x86_64位 3.9.11 Huawei Cloud EulerOS 2.0 ARM64位 x86_64位 3.9.9 psycopg2在编译过程中,会链接(link)GaussDB的openssl,GaussDB的openssl与操作系统自带的openssl可能不兼容。如果遇到不兼容现象,例如提示"version 'OPENSSL_1_1_1f' not found",请使用环境变量LD_LIBRARY_PATH进行隔离,以避免混用操作系统自带的openssl与GaussDB依赖的openssl。 例如,在执行某个调用psycopg2的应用软件client.py时,将环境变量显性赋予该应用软件: export LD_LIBRARY_PATH=/path/to/gaussdb/libs:$LD_LIBRARY_PATH python client.py 其中,/path/to/pyscopg2/lib 表示GaussDB依赖的openssl库所在目录,需根据文件实际存储路径修改。 开发流程 Psycopg包 示例:常用操作 Psycopg接口参考 父主题: 应用程序开发教程
  • ecpg兼容 ecpg提供使用URL连接方式的连接语法,不仅支持“gaussdb”,还兼容支持“postgresql”。 连接语法: EXEC SQL CONNECT TO target [AS connection-name] [USER user-name]; 其中target支持“postgresql”方式如下: tcp:postgresql://hostname[:port][/dbname][?options] unix:postgresql://hostname[:port][/dbname][?options]
  • JDBC兼容性包 从发布包中获取。包名为GaussDB-Kernel_数据库版本号_操作系统版本号_64bit_Jdbc.tar.gz。 解压后JDBC的驱动jar包: gsjdbc4.jar:主类名为“org.postgresql.Driver”,数据库连接的URL前缀为“jdbc:postgresql”,该驱动包适用于从PostgreSQL迁移业务的场景,驱动类和加载路径与迁移前保持一致,但接口支持情况不完全一致,未支持的接口需要业务侧进行调整。 gsjdbc200.jar:该驱动包适用于从Gauss200迁移业务的场景,驱动类和加载路径与迁移前保持一致,但接口支持情况不完全一致,未支持的接口需要业务侧进行调整。 opengaussjdbc.jar:主类名为“com.huawei.opengauss.jdbc.Driver”,数据库连接的URL前缀为“jdbc:opengauss”。如果遇到同一JVM进程内需要同时访问PostgreSQL及GaussDB的场景,请使用此驱动包。 各驱动包只是驱动类加载路径和url前缀不同,接口功能相同。 不能使用gsjdbc4的驱动包操作PostgreSQL数据库,虽然部分版本能够建连成功,但部分接口行为与PostgreSQL JDBC不同,可能导致未知错误 不能使用PostgreSQL的驱动包操作GaussDB数据库,虽然部分版本能够建连成功,但部分接口行为与GaussDB JDBC不同,可能导致未知错误。
  • 获取驱动包 根据不同版本的实例,下载不同版本的发布包,如表1所示。 表1 驱动包下载列表 版本 下载地址 V2.0-8.x 驱动包 驱动包校验包 为了防止软件包在传递过程或存储期间被恶意篡改,下载软件包时需下载对应的校验包对软件包进行校验,校验方法如下: 上传软件包和软件包校验包到虚拟机(Linux操作系统)的同一目录下。 执行如下命令,校验软件包完整性。 cat GaussDB_driver.zip.sha256 | sha256sum --check 如果回显OK,则校验通过。 GaussDB_driver.zip: OK
  • 基于Psycopg开发 Psycopg是一种用于执行SQL语句的PythonAPI,可以为GaussDB数据库提供统一访问接口,应用程序可基于它进行数据操作。Psycopg2是对libpq的封装,主要使用C语言实现,既高效又安全。它具有客户端游标和服务器端游标、异步通信和通知、支持“COPY TO/COPY FROM”功能。支持多种类型Python开箱即用,适配GaussDB数据类型;通过灵活的对象适配系统,可以扩展和定制适配。Psycopg2兼容Unicode。 GaussDB数据库提供了对Psycopg2特性的支持,并且支持psycopg2通过SSL模式连接。 表1 Psycopg支持平台 操作系统 平台 Python版本 EulerOS 2.5 ARM64位 x86_64位 3.8.5 EulerOS 2.9 ARM64位 x86_64位 3.7.4 EulerOS 2.10, Kylin v10, UnionTech20 ARM64位 x86_64位 3.7.9 EulerOS 2.11, Suse 12.5 ARM64位 x86_64位 3.9.11 psycopg2在编译过程中,会连接(link)GaussDB的openssl,GaussDB的openssl与操作系统自带的openssl可能不兼容。如果遇到不兼容现象,例如提示"version 'OPENSSL_1_1_1f' not found",请使用环境变量LD_LIBRARY_PATH进行隔离,以避免混用操作系统自带的openssl与GaussDB依赖的openssl。 例如,在执行某个调用psycopg2的应用软件client.py时,将环境变量显性赋予该应用软件: export LD_LIBRARY_PATH=/path/to/gaussdb/libs:$LD_LIBRARY_PATH python client.py 其中,/path/to/pyscopg2/lib表示GaussDB依赖的openssl库所在目录,需根据文件实际存储路径修改。 开发流程 Psycopg包 示例:常用操作 Psycopg接口参考 父主题: 应用程序开发教程
  • JDBC JDBC(Java Database Connectivity,Java数据库连接)是用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问接口。它允许Java应用程序通过SQL语句来执行数据库操作,包括查询、插入、更新和删除数据等。 以下是JDBC的一些关键特点和用法: 数据库连接管理:JDBC允许应用程序建立与数据库的连接,并管理这些连接的生命周期。 SQL执行: 使用JDBC,可以执行SQL查询、更新、删除等操作。这通过在Java代码中构建SQL语句并将其发送到数据库来实现。 事务管理:JDBC支持事务管理,可以通过JDBC API来启动、提交或回滚事务,确保数据库操作的一致性和完整性。 异常处理: JDBC定义了一组异常类来处理数据库操作期间可能发生的各种异常情况,开发人员可以使用try-catch块来捕获和处理这些异常。 批处理操作:JDBC提供了批处理功能,允许一次性执行多个SQL语句,从而提高数据库操作的效率。 元数据访问: 通过JDBC,可以获取数据库的元数据信息,如表结构、列名、数据类型等,从而动态地构建SQL查询或根据数据库结构进行操作。 总的来说,JDBC提供了一个灵活且强大的桥梁,使Java应用程序能够与各种不同的数据库进行交互,从而实现数据的持久化和管理。GaussDB库提供了对JDBC 4.0特性的支持,需要使用JDK1.8版本编译程序代码,不支持JDBC桥接ODBC方式。 基于JDBC开发详细教程请参见基于JDBC开发。
  • 基于JDBC开发 JDBC(Java Database Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问接口,应用程序可基于它操作数据。 GaussDB库提供了对JDBC 4.0特性的支持,需要使用JDK1.8版本编译程序代码,不支持JDBC桥接ODBC方式。 JDBC包、驱动类和环境类 开发流程 加载驱动 连接数据库 连接数据库(以SSL方式) 连接数据库(以UDS方式) 执行SQL语句 处理结果集 关闭数据库连接 日志管理 示例:常用操作 示例:重新执行应用SQL 示例:通过本地文件导入导出数据 示例:从MYSQL进行数据迁移 示例:逻辑复制代码示例 示例:不同场景下连接数据库参数配置 JDBC接口参考 JDBC数据类型映射关系 常见问题处理 父主题: 应用程序开发教程
  • 开发规范 如果用户在APP的开发中,使用了连接池机制,那么需要遵循如下规范: 如果在连接中设置了GUC参数,那么在将连接归还连接池之前,必须使用“SET SESSION AUTHORIZATION DEFAULT;RESET ALL;”将连接的状态清空。 如果使用了临时表,那么在将连接归还连接池之前,必须将临时表删除。 否则,连接池里面的连接就是有状态的,会对用户后续使用连接池进行操作的正确性带来影响。 应用程序开发驱动兼容性说明如表1所示: 表1 兼容性说明 驱动 兼容性说明 JDBC、ODBC、libpq、Psycopg 驱动前向兼容数据库,若需使用驱动与数据库同步增加的新特性,须升级数据库。 在多线程环境下使用驱动: JDBC驱动程序不是线程安全的,不保证连接上的方法是同步的。由调用者来同步对驱动程序的调用。 父主题: 应用程序开发教程
  • 开发规范 如果用户在APP的开发过程中,使用了连接池机制,那么需要遵循如下规范: 如果在连接中设置了GUC参数,那么在将连接归还连接池之前,必须使用“SET SESSION AUTHORIZATION DEFAULT;RESET ALL;”将连接的状态清空。 如果使用了临时表,那么在将连接归还连接池之前,必须将临时表删除。 否则,连接池里面的连接就是有状态的,会对用户后续使用连接池进行操作的正确性带来影响。 应用程序开发驱动兼容性说明如表1所示: 表1 兼容性说明 驱动 兼容性说明 JDBC、Go 驱动前向兼容数据库,若需使用驱动与数据库同步增加的新特性,须升级数据库。 ODBC、libpq、Psycopg、ecpg 驱动须与数据库版本配套。 behavior_compat_options='proc_outparam_override' 重载参数仅在A兼容模式可用。 原则上,兼容性参数应在创建数据库后就设置,不应在使用过程中来回切换。 涉及使用以下场景的特性需要配合将JDBC驱动升级到503.1及以上的配套版本: 开启s2兼容性参数,设置sessiontimezone的合法性校验。 在多线程环境下使用驱动: JDBC驱动程序是非线程安全的,无法保证连接上的方法同步。由调用者来同步对驱动程序的调用。 父主题: 应用程序开发教程