如何知道PostgreSQL服务器运行在什么操作系统/平台上?

vdgimpew  于 12个月前  发布在  PostgreSQL
关注(0)|答案(3)|浏览(126)

我正在尝试编写一个SQL函数,它可以确定Postgres服务器是否在Windows上运行,这可能吗?或者有没有办法获得正在运行的服务器的平台?

deikduxw

deikduxw1#

您可以使用select version()
我在一个Linux Alpine服务器上(通过Docker容器)尝试了一下,得到了这样的结果:
test=> select();

version                                             
-------------------------------------------------------------------------------------------------
 PostgreSQL 9.6.8 on x86_64-pc-linux-musl, compiled by gcc (Alpine 6.2.1) 6.2.1 20160822, 64-bit
(1 row)

字符串
你可以在这里https://www.postgresql.org/docs/current/functions-info.html获得更多关于postgres系统信息函数的信息
希望对你有帮助!

gzszwxb4

gzszwxb42#

这是我写的代码,并在最后使用,它在Postgres 11版本上工作得很好:

CREATE OR REPLACE FUNCTION GetPLatform()
RETURNS varchar
AS
$$
 declare platform varchar;
begin  
 SELECT CASE
            WHEN OSVersion.OS LIKE '%w64%' THEN 'windows'
            WHEN OSVersion.OS LIKE '%w32%' THEN 'windows'
            WHEN OSVersion.OS LIKE '%mingw%' THEN 'windows'
            WHEN OSVersion.OS LIKE '%visual studio%' THEN 'windows'
            WHEN OSVersion.OS LIKE '%linux%' THEN 'linux'
            WHEN OSVersion.OS LIKE '%mac%' THEN 'mac'
            ELSE
            'UNKNOWN'
         END into platform
    FROM (SELECT 
            substr(substr(version(), strpos(version(), ' on ')+3), 1, 
            strpos(substr(version(), strpos(version(), ' on ')+3), 
            ', compiled by')-1) as OS) 
    as OSVersion;
    return platform;  
end; 
$$
LANGUAGE PLPGSQL;

select GetPLatform()

字符串
您可以根据需要调整其他平台。

kq0g1dla

kq0g1dla3#

由于使用mmap非常罕见,因此您可以使用:用途:

SELECT CASE setting 
          WHEN 'windows' THEN 'WINDOWS family'
          WHEN 'posix' THEN 'UNIX family'
          WHEN 'sysv' THEN 'UNIX family'
          ELSE 'UNKNOWN'
       END AS OS_family
FROM   pg_catalog.pg_file_settings
WHERE  name = 'dynamic_shared_memory_type'

字符串

相关问题