该扩展提供了在LightDB上使用的作弊(但有用的)函数。
请注意,在想要执行该扩展提供的函数的所有数据库中,都需要执行CREATE EXTENSION lt_cheat_funcs。
=# CREATE EXTENSION lt_cheat_funcs;
返回有关所有内存上下文的统计信息。此函数返回一个记录,如下表所示。
列名 | 数据类型 | 描述 |
---|---|---|
name | text | 上下文名称 |
parent | text | 父级上下文的名称 |
level | integer | 上下文树中距离TopMemoryContext的距离 |
total_bytes | bigint | 从malloc请求的总字节数 |
total_nblocks | bigint | malloc块的总数 |
free_bytes | bigint | 空闲空间的字节数 |
free_chunks | bigint | 空闲块的数量 |
used_bytes | bigint | 已使用空间的字节数 |
默认情况下,此函数仅限超级用户使用,但可以授予其他用户EXECUTE权限以运行此函数。
让有关所有内存上下文的统计信息记录在日志中。每个内存上下文的日志消息格式如下:
[name]: [total_bytes] 总共 [total_nblocks] 个块;[free_bytes] 空闲([free_chunks] 个块);[used_bytes] 已使用
有关上述字段的描述,请参见 pg_stat_get_memory_context()。
默认情况下,此函数仅限超级用户使用,但可以授予其他用户EXECUTE权限以运行此函数。
返回指定准备语句的缓存计划源的信息。此函数返回一个记录,如下表所示。
列名 | 数据类型 | 描述 |
---|---|---|
generic_cost | double precision | 通用计划的成本,如果不知道,则为-1 |
total_custom_cost | double precision | 自定义计划的总成本 |
num_custom_plans | integer | 总计划包含的计划数 |
force_generic | boolean | 是否强制使用通用计划? |
force_custom | boolean | 是否强制使用自定义计划? |
向LightDB服务器进程发送信号。此函数仅能向postmaster、backend、walsender和walreceiver进程发送信号。有效的信号名称包括HUP、INT、QUIT、ABRT、KILL、TERM、USR1、USR2、CONT和STOP。默认情况下,此函数仅限超级用户使用,但可以授予其他用户EXECUTE权限以运行此函数。
例如,终止walreceiver进程:
=# SELECT pg_signal_process(pid, 'TERM') FROM pg_stat_wal_receiver;
返回指定LightDB服务器进程的调度优先级(“nice” )。此函数仅能获取postmaster、backend、walsender和walreceiver进程的优先级。有关调度优先级的详细信息,请参见getpriority(2)手册页。默认情况下,此函数仅限超级用户使用,但可以授予其他用户EXECUTE权限以运行此函数。
将指定LightDB服务器进程的调度优先级(“nice” )设置为指定的值。此函数仅能更改postmaster、backend、walsender和walreceiver进程的优先级。有关调度优先级的详细信息,请参见getpriority(2)手册页。默认情况下,此函数仅限超级用户使用,但可以授予其他用户EXECUTE权限以运行此函数。
引起分段错误。如果启用了lt_cheat_funcs.exit_on_segv并且treat_fatal_as_error为true,则此函数引起的分段错误将导致ERROR而不是FATAL错误。这主要用于测试。默认情况下,此函数仅限超级用户使用,但可以授予其他用户EXECUTE权限以运行此函数。
读取并处理配置文件。请注意,如果发生错误,则会使用DEBUG2级别记录错误。默认情况下,此函数仅限超级用户使用,但可以授予其他用户EXECUTE权限以运行此函数。
将事务日志位置字符串转换为文件名。此函数与LightDB核心提供的pg_xlogfile_name()函数几乎相同。它们之间的区别在于是否有第二个类型为boolean的参数。如果为false,则此函数在恢复过程中始终失败并显示错误信息。这与pg_xlogfile_name()的核心版本相同。如果为true,则即使在恢复过程中也可以执行此函数。但请注意,返回的WAL文件名的前8个数字(表示时间线ID)可能完全不正确。也就是说,此函数可能返回虚假的WAL文件名。有关此转换的详细信息,请参见 Section 10.27.3。
返回所有等待同步复制的服务器进程的统计信息。此函数为每个等待同步复制的服务器进程返回一个记录,如下表所示。
列名 | 数据类型 | 描述 |
---|---|---|
pid | integer | 服务器进程的进程ID |
wait_lsn | pg_lsn | 等待的事务日志位置 |
wait_mode | text | 服务器进程的等待模式 |
wait_mode的可能值为write、flush和apply。
默认情况下,此函数仅限超级用户使用,但可以授予其他用户EXECUTE权限以运行此函数。
等待同步复制。此函数一直等待,直到根据synchronous_commit的设置,给定的事务日志位置被同步备用实例确认。
默认情况下,此函数仅限超级用户使用,但可以授予其他用户EXECUTE权限以运行此函数。
设置并返回下一个事务ID。请注意,此函数不会检查将给定的事务ID分配给下一个事务ID是否安全。调用者必须谨慎选择安全的事务ID,例如,不会引起事务ID环绕问题。默认情况下,此函数仅限超级用户使用,但可以授予其他用户EXECUTE权限以运行此函数。
返回有关事务ID分配状态的信息。此函数返回一个记录,如下表所示。
列名 | 数据类型 | 描述 |
---|---|---|
next_xid | xid | 要分配的下一个事务ID |
oldest_xid | xid | 集群中最小的datfrozenxid |
xid_vac_limit | xid | 开始强制执行自动清理的位置 |
xid_warn_limit | xid | 开始发出警告的位置 |
xid_stop_limit | xid | 拒绝将下一个事务ID超越此处 |
xid_wrap_limit | xid | 世界末日的位置 |
oldest_xid_db | oid | 具有最小datfrozenxid的数据库 |
默认情况下,此函数仅限超级用户使用,但可以授予其他用户执行此函数的EXECUTE权限。
设置并返回下一个对象ID(OID)。请注意,当给定的OID小于16384(FirstNormalObjectId)时,下一个OID将被设置为16384。默认情况下,此函数仅限超级用户使用,但可以授予其他用户执行此函数的EXECUTE权限。
返回有关对象ID(OID)分配状态的信息。此函数返回一个记录,如下表所示。
列名 | 数据类型 | 描述 |
---|---|---|
next_oid | oid | 要分配的下一个对象ID |
oid_count | integer | 必须执行WAL工作之前可用的OID数量 |
默认情况下,此函数仅限超级用户使用,但可以授予其他用户执行此函数的EXECUTE权限。
指定VACUUM和HOT更新清理死行版本所需推进的事务数。 调用此函数的会话中的vacuum_defer_cleanup_age 被设置为指定数字的负值。如果省略了参数或指定了NULL,则会将vacuum_defer_cleanup_age重置为配置文件中指定的原始设置值。 该函数返回清理VACUUM的年龄(vacuum cleanup age)。
通过推进清理年龄,VACUUM和HOT更新可以清理甚至是自最旧事务开始以来产生的死元组。 因此,这个函数对于防止长时间运行的事务期间由于无法删除的死元组而导致数据库膨胀非常有帮助。
请注意,这是一项极其危险的功能,很容易损坏数据库。任何重要数据都可能消失,数据一致性可能完全丢失。 这个函数除了调试目的外,绝不能用于其他目的。
默认情况下,此函数仅限超级用户使用,但其他用户也可以被授予EXECUTE权限来运行该函数。
执行检查点。如果快速(fast)为true(默认值),检查点将尽快完成。 否则,为了最小化查询处理的影响,检查点所需的I/O将分布在一段时间内。 如果等待(wait)为true(默认值),则此函数在返回之前等待检查点完成。 否则,它只是向检查点发出信号并返回。 如果强制(force)为true(默认值),则此函数即使自上次检查点以来没有WAL活动也会强制执行检查点。 默认情况下,此函数仅限超级用户使用,但其他用户也可以被授予EXECUTE权限来运行该函数。
返回recovery.conf中所有参数设置的信息。此函数返回一个记录,如下表所示。
列名 | 数据类型 | 描述 |
---|---|---|
名称 | 文本 | 配置参数名称 |
设置 | 文本 | 参数值 |
默认情况下,此函数仅限超级用户使用,但其他用户也可以被授予EXECUTE权限来运行该函数。
返回primary_conninfo恢复参数的当前值。如果尚未设置,则返回NULL。 默认情况下,此函数仅限超级用户使用,但其他用户也可以被授予EXECUTE权限来运行该函数。 有关primary_conninfo参数的详细信息,请参见primary_conninfo。
返回postmaster进程的进程ID。
返回当前会话所附加的服务器进程启动时间。
列出指定关系的文件路径名称。
返回特定于主版本的表空间子目录的名称。
将bytea数据写入文件。如果文件不存在,则此函数创建文件,并将其截断为零长度。然后,此函数从文件开头写入bytea数据,并返回写入的字节数。 默认情况下,此函数仅限超级用户使用,但其他用户也可以被授予EXECUTE权限来运行该函数。
尝试对文件或目录进行fsync。默认情况下,此函数仅限超级用户使用,但其他用户也可以被授予EXECUTE权限来运行该函数。
将数字转换为其等效的八进制表示。
将文本转换为其等效的十六进制表示。
这是一个将文本转换为十六进制的示例:
=# SELECT pg_text_to_hex('LightDB'); pg_text_to_hex ---------------------- 4c696768744442 (1 row)
将十六进制表示转换为其等效的文本。
这是一个将十六进制转换为文本的示例:
=# SELECT pg_hex_to_text('4c696768744442'); pg_hex_to_text ---------------- LightDB (1 row)
返回具有给定代码的字符。此函数与LightDB核心提供的chr()函数几乎相同。它们的区别在于,当请求的字符过大或无效时,此函数返回NULL,而不是抛出错误。请注意,有效的Unicode代码点停止于U+10FFFF(1114111),即使4字节的UTF8序列可以容纳高达U+1FFFFF的值。因此,每当给定的代码大于1114111时,此函数都会返回NULL。
pg_chr(code integer)函数的别名。
返回所有有效的UTF-8字符。此函数返回一个记录,如下表所示。
列名 | 数据类型 | 描述 |
---|---|---|
代码 | 文本 | 字符的代码 |
utf8 | 文本 | UTF-8字符 |
此函数仅可在UTF-8数据库编码下执行。
返回具有给定代码的EUC_JP字符。以下表格显示代码的有效组合。
code1 | code2 | code3 |
---|---|---|
x00 - x7f | - | - |
x8e | xa1 - xdf | - |
xa1 - xfe | xa1 - xfe | - |
x8f | xa1 - xfe | xa1 - xfe |
例如,返回具有代码“a1fa”(黑色星号)的EUC_JP字符:
=# SELECT pg_eucjp('xa1', 'xfa');
如果请求的字符对于EUC_JP无效,则此函数返回NULL。此函数仅可在EUC_JP数据库编码下执行。
返回所有有效的 EUC_JP 字符。该函数返回一个记录,如下表所示。
列名 | 数据类型 | 描述 |
---|---|---|
code1 | text | 字符的第一个字节 |
code2 | text | 字符的第二个字节(x00 表示该字节不存在) |
code3 | text | 字符的第三个字节(x00 表示该字节不存在) |
eucjp | text | EUC_JP 字符 |
该函数只能在 EUC_JP 数据库编码下执行。
创建并返回文本数据的压缩版本。该函数使用 PGLZ(一种用于 LightDB 的 LZ 压缩实现)进行压缩。如果压缩失败(例如,压缩结果实际上比原始数据更大),则该函数返回原始数据。请注意,即使压缩失败,返回数据可能比原始数据多 4 个字节,因为它始终存储 4 个字节的额外信息,如原始数据的长度。该函数返回的 bytea 数据需要使用 pg_lz_decompress() 进行解压缩,以获取原始文本数据。
创建并返回 bytea 数据的压缩版本。该函数使用 PGLZ(一种用于 LightDB 的 LZ 压缩实现)进行压缩。如果压缩失败(例如,压缩结果实际上比原始数据更大),则该函数返回原始数据。请注意,即使压缩失败,返回数据可能比原始数据多 4 个字节,因为它始终存储 4 个字节的额外信息,如原始数据的长度。该函数返回的 bytea 数据需要使用 pg_lz_decompress_bytea() 进行解压缩,以获取原始 bytea 数据。
将 bytea 数据的压缩版本解压缩为文本。请注意,该函数的输入必须是 pg_lz_compress() 或 pg_lz_compress_bytea() 返回的 bytea 数据。否则该函数可能返回损坏的数据。
将 bytea 数据的压缩版本解压缩为 bytea。请注意,该函数的输入必须是 pg_lz_compress() 或 pg_lz_compress_bytea() 返回的 bytea 数据。否则该函数可能返回损坏的数据。
使用 SASLprep 对输入字符串进行规范化处理。SASLprep 规范化主要用于将用户提供的密码处理为 SCRAM 认证的规范形式。请注意,如果输入不是有效的 UTF-8 字符串或规范化后的字符串包含 SASLprep 档案禁止使用的字符,则会引发错误。
释放先前获取的排他事务级别的咨询锁。如果成功释放锁,则返回 true。如果未持有锁,则返回 false,并且服务器将报告一个 SQL 警告。
释放先前获取的共享事务级别的咨询锁。如果成功释放锁,则返回 true。如果未持有锁,则返回 false,并且服务器将报告一个 SQL 警告。
与 pg_advisory_xact_unlock(bigint) 相同。
与 pg_advisory_xact_unlock_shared(bigint) 相同。
这是从 EUC_JP 到 UTF-8 的编码转换。它使用两个转换映射;普通映射和额外映射。它们分别定义在 conv/euc_jp_to_utf8.map
和 conv/euc_jp_to_utf8.extra
中。对于每个字符,首先查询普通映射。如果没有匹配,则查询额外映射。如果还没有匹配,则会引发错误。
普通映射的内容与 LightDB 提供的默认从 EUC_JP 到 UTF-8 的转换映射 euc_jp_to_utf8 相同。额外映射包含一些普通映射没有的映射(例如,以下罗马数字和全角符号的映射)。
EUC_JP | UTF-8 | 描述 |
---|---|---|
fcf1 | e285b0 (U+2170) | 小型罗马数字一 |
fcf2 | e285b1 (U+2171) | 小型罗马数字二 |
fcf3 | e285b2 (U+2172) | 小型罗马数字三 |
fcf4 | e285b3 (U+2173) | 小型罗马数字四 |
fcf5 | e285b4 (U+2174) | 小型罗马数字五 |
fcf6 | e285b5 (U+2175) | 小型罗马数字六 |
fcf7 | e285b6 (U+2176) | 小型罗马数字七 |
fcf8 | e285b7 (U+2177) | 小型罗马数字八 |
fcf9 | e285b8 (U+2178) | 小型罗马数字九 |
fcfa | e285b9 (U+2179) | 小型罗马数字十 |
fcfb | efbfa2 (U+FFE2) | 全角非符号 |
fcfc | efbfa4 (U+FFE4) | 全角破折号 |
fcfd | efbc87 (U+FF07) | 全角撇号 |
fcfe | efbc82 (U+FF02) | 全角双引号 |
要将pg_euc_jp_to_utf8作为EUC_JP到UTF-8的默认转换方式,需要启用其
pg_conversion
.condefault。
同时需要禁用euc_jp_to_utf8(从EUC_JP到UTF-8的内置转换)的condefault。
这里是这些目录更新的示例:
=# BEGIN; =# UPDATE pg_conversion SET condefault = 'f' WHERE conname = 'euc_jp_to_utf8'; =# UPDATE pg_conversion SET condefault = 't' WHERE conname = 'pg_euc_jp_to_utf8'; =# COMMIT;
可以通过直接修改映射文件并重建lt_cheat_funcs模块来使用自定义的转换映射表。 注意,映射文件中的条目必须按升序排序。
请注意,如果要使用该扩展提供的配置参数,必须将 shared_preload_libraries 或 session_preload_libraries 设置为“lt_cheat_funcs”,并写入到lightdb.conf文件中。
在查询执行结束时记录有关内存上下文的统计信息。有关日志格式的详细信息,请参见 pg_stat_print_memory_context()。 默认情况下,此参数处于关闭状态。只有超级用户可以更改此设置。
如果为True,则忽略客户端的application_name,并将其设置值存储在lt_cheat_funcs.hidden_appname参数中。 默认情况下,此参数设置为False,因此将使用客户指定的字符串作为应用程序名称。 此参数仅可在lightdb.conf文件中或服务器命令行中设置。
报告客户端隐藏的应用程序名称。默认为空字符串。任何用户都可以更改此设置。
记录在连接开始时发送到服务器的选项。默认情况下,此参数处于关闭状态。 只有超级用户可以在会话开始时更改此参数,并且无法在会话内部更改此参数。
指定LightDB服务器进程的调度优先级(“nice”)。有效值介于-20和19之间。 较低的值会导致更有利的调度。默认值为0。任何用户都可以更改此设置。 有关调度优先级的详细信息,请参见getpriority(2)手册页。
如果为off,则缺页中断将导致服务器崩溃。如果为on,则仅终止导致缺页中断的当前会话。 默认值为off。任何用户都可以更改此设置。