PostgreSQL的分发、安装和连接

PostgreSQL的分发、安装和连接,postgresql,Postgresql,尚未找到此问题的答案,但如果这是重复的,请相应地标记 尝试了解如何通过静默安装将PostgreSQL分发给最终用户,以及在以下情况下的相应操作: 计算机系统上已安装PostgreSQL 如何以超级用户身份连接到PostgreSQL(如果已安装) 创建一个数据库(与#2相关,因为我们在最初安装postgresql时不知道postgresql用户的凭据) 对于#1,根据我的研究和理解,有两种方法: 确定是否安装了postgresql-[version]服务(根据) 确定HKEY\U LOCAL\U

尚未找到此问题的答案,但如果这是重复的,请相应地标记

尝试了解如何通过静默安装将PostgreSQL分发给最终用户,以及在以下情况下的相应操作:

  • 计算机系统上已安装PostgreSQL
  • 如何以超级用户身份连接到PostgreSQL(如果已安装)
  • 创建一个数据库(与#2相关,因为我们在最初安装postgresql时不知道postgresql用户的凭据)
  • 对于#1,根据我的研究和理解,有两种方法:

  • 确定是否安装了postgresql-[version]服务(根据)
  • 确定HKEY\U LOCAL\U MACHINE\SOFTWARE\PostgreSQL\registry是否存在,如果存在,请查看\Installations\和\Services\subs下的版本和服务名称
  • 然而,我更关心的是连接部分。如果我的应用程序(用C#编写)依赖于数据库名“MyProgram”,那么如何在PostgreSQL中创建数据库?使用什么凭据

    根据我的理解,方法是尝试以默认超级用户postgres身份登录到默认数据库postgres,并从该连接创建新的用户和数据库。但是,postgres用户的密码是由最初安装PostgreSQL的用户/程序在安装期间设置的

    怎么办?
    非常感谢您的帮助

    重要提示:这可能不是最合乎道德/最恰当的方式,但似乎可以完成工作

    经过数小时的挖掘,在Windows上使用注册表项似乎是确定您打算安装的PostgreSQL版本(如果已经安装)的最佳方法

    假设我在具有管理权限的Windows系统上运行,理论上,我应该能够更改已经存在的数据目录(即群集)中pg_hba.conf文件的登录凭据要求,以允许我创建需要的数据库和用户,在将凭证要求设置恢复为原来的设置之前

    因此,我得出的结论是:

  • 确定是否已安装PostgreSQL。查看
    HKEY\U LOCAL\U MACHINE\SOFTWARE\PostgreSQL\Installation\[version]
    注册表,其中
    [version]
    格式为
    PostgreSQL-[32或64位]-[PostgreSQL version]
    ,例如
    PostgreSQL-x64-12
    )。如果注册表存在,则
    数据目录
    值的数据应该存在。。。获取这些数据,这就是集群所在的位置
  • 步骤[2]和on显然适用于已安装PostgreSQL的情况

  • 在步骤[1]中的
    数据目录
    值提供的集群目录中复制
    pg_hba.conf
    文件
  • 这将是我们完成后还原到的文件。将文件保存到临时目录,如桌面

  • 在群集目录中的
    pg_hba.conf
    文件中,将所有连接类型的方法更改为
    trust
  • 例如:

    # TYPE  DATABASE        USER            ADDRESS                 METHOD
    host    all             all             127.0.0.1/32            trust
    
  • 使用以下命令重新启动Postgres的Windows服务:
    pg_ctl.exe Restart-D
  • 注意:
    pg_ctl.exe
    位于Postgres安装目录的\bin\文件夹下

    示例:
    C:\Program Files\PostgreSQL\12\bin\pg\u ctl.exe重新启动-D“C:\Program Files\PostgreSQL\12\data\”

  • 连接到集群并发出命令,根据您的需要使用以下命令创建超级用户角色:
    psql-h 127.0.0.1-p 5432-d postgres-c“创建角色登录超级用户密码”;
  • 在上面的命令中,我让集群在本地计算机上运行(即localhost,IP地址127.0.0.1),端口#5432(默认值),连接到默认数据库
    postgres
    ,并发出命令以创建一个角色,该角色使用提供的任何角色名称代替
    ,并提供超级用户权限和密码代替

    由于必须连接到数据库,因此我正在连接到默认数据库
    postgres
    ,否则
    template0
    template1
    是也可以使用的默认数据库

  • 连接到集群并发出命令,使用以下命令创建所需的数据库:
    psql-h 127.0.0.1-p 5432-d postgres-c“创建数据库”
  • pg_hba.conf
    文件替换为原始文件
  • 使用以下命令重新启动Postgres的Windows服务:
    pg_ctl.exe Restart-D