GitLab CI为长度超过63个字符限制的Postgres生成数据库名称(django.core.exceptions.ImpropertlyConfigured)

GitLab CI为长度超过63个字符限制的Postgres生成数据库名称(django.core.exceptions.ImpropertlyConfigured),django,postgresql,gitlab-ci,Django,Postgresql,Gitlab Ci,在为Django应用程序运行pytest的GitLab CI作业中使用postgres作为服务时遇到问题 以下是我的GitLab CI工作: Pytest: 图片:python:3.8 阶段:测试 服务: -博士后:13.1 -redis:6.0.9-阿尔卑斯山 变量: DJANGO_设置_模块:“backend.SETTINGS.gitlab_ci” #数据库名称太长,请在此处显式设置 #我尝试设置数据库URL,但没有成功: #数据库URL:“postgresql://postgres:pos

在为Django应用程序运行pytest的GitLab CI作业中使用postgres作为服务时遇到问题

以下是我的GitLab CI工作:

Pytest:
图片:python:3.8
阶段:测试
服务:
-博士后:13.1
-redis:6.0.9-阿尔卑斯山
变量:
DJANGO_设置_模块:“backend.SETTINGS.gitlab_ci”
#数据库名称太长,请在此处显式设置
#我尝试设置数据库URL,但没有成功:
#数据库URL:“postgresql://postgres:postgres@博士后:5432/博士后“
秘密密钥:“秘密”
调试:“1”
POSTGRES\u主机\u身份验证\u方法:信任
脚本:
-cd后端
-pip安装-r要求/base.txt
-pip安装-r需求/test.txt
-薄片8
-黑色-l 79-S--diff。
-pytest--cov--cov config=.coveragerc
覆盖率:“/TOTAL.+([0-9]{1,3}\[0-9]{1,3}%)/”
backend/settings/gitlab_ci.py
中,我有以下
数据库
设置:

数据库={
“默认值”:{
“引擎”:“django.db.backends.postgresql_psycopg2”,
'姓名':'博士后',
'USER':'postgres',
“密码”:“postgres”,
“主机”:“postgres”,
“端口”:“5432”,
},
}
以下是失败CI作业的相关日志

\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
自我=
def get_connection_参数(自):
设置\u dict=self.settings\u dict
#无可用于连接到默认的“postgres”数据库
如果设置[名称]='':
提高配置不当(
“设置。数据库配置不正确。”
“请提供名称值。”)
如果len(settings_dict['NAME']或“”)>self.ops.max_NAME_length():
>提高配置不当(
“数据库名称“%s”(%d个字符)长于”
“PostgreSQL限制为%d个字符。请提供较短的名称”
“在设置.数据库中。”%(
设置[名称],
len(设置[名称]),
self.ops.max_name_length(),
)
)
E django.core.exceptions.ImpropertyConfigured:数据库名称“test_97;/runner-72989761-project-22626407-concurrent-0-a737df6e05b7c794-build-2/postgres”(85个字符)超过PostgreSQL的63个字符限制。在settings.DATABASES中提供较短的名称。
/usr/local/lib/python3.8/site-packages/django/db/backends/postgresql/base.py:161:配置不正确
下面是指向GitLab上所有管道的链接

以下是我为解决此问题而尝试的一些方法:

  • 数据库
    默认值
    中的
    名称
    值设置为
    ci
  • 设置
    数据库\u URL:“postgresql://postgres:postgres@postgres:5432/postgres“
    在CI作业变量中
  • 回到postgres版本11.5,我在其他几个项目上使用过该版本,在这些项目中,数据库名称长度不是问题
  • 名称
    设置为
    (从日志中:
    #无可用于连接默认的“postgres”数据库
我认为GitLab CI正在以某种方式更改数据库名称的值,因为它显示为:

test_/runner-72989761-project-22626407-concurrent-0-a737df6e05b7c794-build-2/postgres
在失败的CI作业日志中

编辑:我已将其与@Origin的建议结合使用。以下是我的新管道定义:

阶段:
-试验
Pytest:
图片:python:3.9
阶段:测试
服务:
-博士后:12.2分
-redis:6.2.4
变量:
# https://docs.gitlab.com/ee/ci/services/postgres.html#use-带有docker执行器的postgresql
博士后数据库:ci
博士后姓名:ci
POSTGRES\u用户:POSTGRES
POSTGRES_密码:“
POSTGRES\u主机\u身份验证\u方法:“信任”
博士后服务主持人:“博士后”
REDIS\u服务\u主机:“REDIS”
秘密密钥:“秘密”
调试:“1”
在脚本之前:
-cd后端
-pip安装-r要求\u dev.txt
脚本:
-薄片8
-黑色-l 79-S-检查。
-pytest--cov
在脚本之后:
-echo“Pytest测试完成”
覆盖范围:“/TOTAL.+([0-9]{1,3}%)/”
POSTGRES\u DB
用于
POSTGRES
服务,
POSTGRES\u NAME
是my Django设置中的数据库名称。

尝试添加

  variables:
    POSTGRES_DB: postgres
    POSTGRES_USER: postgres
    POSTGRES_HOST_AUTH_METHOD: trust

另外,如果你给POSTGRES\u HOST\u AUTH\u方法:信任 你不必使用密码

我认为在您的情况下,出现问题是因为您没有设置POSTGRES\u DB和POSTGRES\u用户。若并没有给出一个显式的dbname,我认为username是作为db名称的,因为username并没有被给出,所以runner name被采用

另外,更改POSTGRES_用户也会更好
如果在使用postgres时出现问题,请联系其他人。

谢谢,这很有效!