Postgres Database private url, is it faster and how to use it?

nahasco
HOBBY

2 years ago

I have a Django rest framework setup with postgress db and it seems the connection is slow.

I noticed there is a database private url and i wonder if this is a faster connection. If it is how can I configure it in my project?

I read the doc article about private networking but I am new here and couldnt really understand how to do it.

Any help is greatly appreciated.

Thanks.

0 Replies

nahasco
HOBBY

2 years ago

643c9962-5fa0-449c-82e0-67b30f66c552


2 years ago

what environment variables do you currently use in your database configuration in the settings.py file?


nahasco
HOBBY

2 years ago

I previously used to parse the DATABASE URL thats in my env variables. But I tried today to specify the fields such as PG_HOST, user, password, etc.. but I received the same results.


nahasco
HOBBY

2 years ago

DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": os.environ["PGDATABASE"],
"USER": os.environ["PGUSER"],
"HOST": os.environ["PGHOST"],
"PASSWORD": os.environ["PGPASSWORD"],
"PORT": os.environ["PGPORT"],
}
}


2 years ago

can you show me the code you used to parse those options from the url environment variable, if we can get that method working I think it would be the easiest


nahasco
HOBBY

2 years ago

Sure


nahasco
HOBBY

2 years ago

db_url = os.environ["DATABASE_URL"]
DATABASES = {"default": dj_database_url.parse(f"{db_url}")}

nahasco
HOBBY

2 years ago

db_url = os.environ["DATABASE_URL"]
DATABASES = {"default": dj_database_url.parse(f"{db_url}")}

2 years ago

why not just

db_url = os.environ["DATABASE_URL"]
DATABASES = {"default": dj_database_url.parse(db_url)}

nahasco
HOBBY

2 years ago

Right, no idea why I did it they way I did


2 years ago

and what is the DATABASE_URL set to?


nahasco
HOBBY

2 years ago

The postgres DATABASE_URL variable from postgres


2 years ago

it should be set to ${{Postgres.DATABASE_PRIVATE_URL}}


nahasco
HOBBY

2 years ago

i tried that but it caused connection issues


nahasco
HOBBY

2 years ago

django.db.utils.OperationalError: could not translate host name "postgres-9l4v.railway.internal" to address: Name or service not known


2 years ago

okay is this a nixpacks or a dockerfile deployment


nahasco
HOBBY

2 years ago

nixpacks


2 years ago

can you add a 3 second sleep to your start command


nahasco
HOBBY

2 years ago

how can i do that?


2 years ago

what's your current start command and where is it defined?


nahasco
HOBBY

2 years ago

{
    "$schema": "https://railway.app/railway.schema.json",
    "build": {
        "builder": "NIXPACKS"
    },
    "deploy": {
        "startCommand": "python manage.py migrate && python manage.py collectstatic --noinput && gunicorn --timeout 500 tibian_backend.wsgi",
        "restartPolicyType": "NEVER",
        "restartPolicyMaxRetries": 10
    }
}

nahasco
HOBBY

2 years ago

railway.json at home dir


2 years ago

change to

{
    "$schema": "https://railway.app/railway.schema.json",
    "build": {
        "builder": "NIXPACKS"
    },
    "deploy": {
        "startCommand": "sleep 3 && python manage.py migrate && python manage.py collectstatic --noinput && gunicorn --timeout 500 tibian_backend.wsgi",
        "restartPolicyType": "NEVER",
        "restartPolicyMaxRetries": 10
    }
}

nahasco
HOBBY

2 years ago

ok ill test that


nahasco
HOBBY

2 years ago

thanks for helping so far..


nahasco
HOBBY

2 years ago

ok this error is weird


nahasco
HOBBY

2 years ago

django.core.exceptions.ImproperlyConfigured: The database name 'railwaypostgresql://postgres:FB-2C-FgdaFF21FGDa5fEBFE43-ecC-D@postgres-9l4v.railway.internal:5432/railway' (105 characters) is longer than PostgreSQL's limit of 63 characters. Supply a shorter NAME in settings.DATABASES.


nahasco
HOBBY

2 years ago

I think the env var arent correct


nahasco
HOBBY

2 years ago

ill fix that


nahasco
HOBBY

2 years ago

ok it seems to be working well


2 years ago

awesome


nahasco
HOBBY

2 years ago

why is that, may you explain?


2 years ago

why the 3 second sleep is needed?


nahasco
HOBBY

2 years ago

yes, and why is it not needed in the normal db url


2 years ago

the private network's dns resolver is not available for the first 3 or so seconds


nahasco
HOBBY

2 years ago

Oh


nahasco
HOBBY

2 years ago

would have never figured that on my own


nahasco
HOBBY

2 years ago

thank you! i really appreciate your help


2 years ago

happy to help!


Postgres Database private url, is it faster and how to use it? - Railway Help Station