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

问题描述 投票:0回答:3

我正在尝试编写一个

SQL
函数来确定Postgres服务器是否在Windows上运行,这可能吗?或者有没有办法获取正在运行的服务器的平台?

postgresql postgresql-9.3 postgresql-9.4 postgresql-9.2 postgresql-9.5
3个回答
3
投票

您可以简单地使用

select version()

我在 Linux Alpine 服务器上尝试了它(通过 Docker 容器)并得到了这个:
测试=>选择版本();

                                             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)

您可以在这里获得有关 postgres 系统信息函数的更多信息 https://www.postgresql.org/docs/current/functions-info.html

希望对你有帮助!


1
投票

这是我最后编写和使用的代码,它在 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()

您可以根据需要调整其他平台...


0
投票

因为使用 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'

另一个解决方案可能是:

SELECT CASE setting
          WHEN '0700' THEN 'Windows'
          ELSE 'UNIX'
       END AS OS_FAMILLY
FROM   pg_settings
WHERE name = 'data_directory_mode'

显示 UNIX 或 Windows 之间的操作系统系列...

© www.soinside.com 2019 - 2024. All rights reserved.