我使用Firebird 2.5,并且想要检索以下值
用户名:
我使用了SELECT rdb$get_context('SYSTEM', 'CURRENT_USER') FROM ...
数据库名称:
我使用了SELECT rdb$get_context('SYSTEM', 'DB_NAME') FROM ...
但是对于服务器名称,我没有找到任何客户端API,您知道如何使用SELECT语句检索服务器名称。
答案 0 :(得分:0)
Firebird内置没有任何东西可以通过SQL获取服务器主机名(或主机名,因为服务器可以有多个主机名)。
最接近的方法是通过isc_info_firebird_version
API函数请求isc_database_info
信息项。返回的版本信息-如果通过TCP / IP连接-包括服务器的主机名。
但是,由于您这样做的主要原因是要区分SQL中的环境,因此最好寻找其他解决方案。一些想法:
您可以创建一个external table来包含所需的环境信息
在此示例中,我只是为环境类型输入了一个简短的,固定宽度的名称,但是您可以包括其他信息,只是要知道外部表格式是二进制格式。使用CHAR
时,它将看起来像是固定宽度格式,其中小于声明值的值需要用空格填充。
您可以按照以下步骤操作:
在ExternalFileAccess
中配置firebird.conf
(在此示例中,您需要设置ExternalFileAccess = Restrict D:\data\DB\exttables
)。
然后您可以创建表
create table environment
external file 'D:\data\DB\exttables\environment.dat' (
environment_type CHAR(3) CHARACTER SET ASCII NOT NULL
)
接下来,创建文件D:\data\DB\exttables\environment.dat
并使用正好三个字符填充(例如,TST
用于测试,PRO
用于生产,等等)。您也可以插入值,否则将自动创建外部表文件。如果您想要更多的列或具有不同长度的数据等,则插入可能会更简单。请记住,它是二进制的,但是对所有列使用CHAR
会使它看起来像文本。
针对每个环境执行此操作,并确保文件是只读文件,以避免意外插入。
完成此操作后,您可以使用
获取环境信息。select environment_type
from environment
您可以为同一主机上的多个数据库共享同一文件,并且-默认情况下-外部文件不包含在gbak备份中(仅当您应用-convert
备份选项时才包含这些文件),因此这将允许在环境之间移动数据库,而不会拖延这些信息。
您可以使用适当的编程语言编写UDF(用户定义的函数)或UDR(用户定义的例程),以返回所需的信息并在数据库中定义此函数。然后,Firebird可以从SQL调用此函数。
UDF被认为已弃用,如果可能,您应该使用Firebird 3中引入的UDR。
我自己从未写过UDF或UDR,因此无法详细描述。