3a8b4b0205
`/usr/bin/pg_dump` on Ubuntu and Debian is actually a tool which attempts to choose which `pg_dump` binary from all of the `postgresql-client-*` packages that are installed to run. However, its logic is confused by passing empty `--host` and `--port` options -- instead of looking at the running server instance on the server, it instead assumes some remote host and chooses the highest versioned `pg_dump` which is installed. Because Zulip writes binary database backups, they are sensitive to the version of the client `pg_dump` binary is used -- and the output may not be backwards compatible. Using a PostgreSQL 16 `pg_dump` writes archive format 1.15, which cannot be read by a PostgreSQL 15 `pg_restore`. Zulip does not currently support PostgreSQL 16 as a server. This means that backups on servers with `postgresql-client-16` installed did not successfully round-trip Zulip backups -- their backups are written using PostgreSQL 16's client, and the `pg_restore` chosen on restore was correctly chosen as the one whose version matched the server (PostgreSQL 15 or below), and thus did not understand the new archive format. Existing `./manage.py backups` taken since `postgresql-client-16` were installed are thus not directly usable by the `restore-backup` script. They are not useless, however, since they can theoretically be converted into a format readable by PostgreSQL 15 -- by importing into a PostgreSQL 16 instance, and re-dumping with a PostgreSQL 15 `pg_dump`. Fix this issue by hard-coding path to the binary whose version matches the version of the server we are connected to. This may theoretically fail if we are connected to a remote PostgreSQL instance and we do not have a `postgresql-client` package locally installed which matches the remote PostgreSQL server's version. However, choosing a matching version is the only way to ensure that it will be able to be imported cleanly -- and it is preferable that we fail the backup process rather than write backups that we cannot easily restore from. Fixes: #27160. |
||
---|---|---|
.github | ||
.tx | ||
.vscode | ||
analytics | ||
api_docs | ||
confirmation | ||
corporate | ||
docs | ||
help | ||
locale | ||
patches | ||
pgroonga | ||
puppet | ||
requirements | ||
scripts | ||
static | ||
stubs/taint | ||
templates | ||
tools | ||
var/puppeteer | ||
web | ||
zerver | ||
zilencer | ||
zproject | ||
.codecov.yml | ||
.codespellignore | ||
.editorconfig | ||
.eslintignore | ||
.eslintrc.json | ||
.gitattributes | ||
.gitignore | ||
.gitlint | ||
.mailmap | ||
.npmignore | ||
.npmrc | ||
.prettierignore | ||
.pyre_configuration | ||
.readthedocs.yaml | ||
.sonarcloud.properties | ||
CODE_OF_CONDUCT.md | ||
CONTRIBUTING.md | ||
Dockerfile-postgresql | ||
LICENSE | ||
NOTICE | ||
README.md | ||
SECURITY.md | ||
Vagrantfile | ||
manage.py | ||
package.json | ||
pnpm-lock.yaml | ||
prettier.config.js | ||
pyproject.toml | ||
stylelint.config.js | ||
tsconfig.json | ||
version.py |
README.md
Zulip overview
Zulip is an open-source team collaboration tool with unique topic-based threading that combines the best of email and chat to make remote work productive and delightful. Fortune 500 companies, leading open source projects, and thousands of other organizations use Zulip every day. Zulip is the only modern team chat app that is designed for both live and asynchronous conversations.
Zulip is built by a distributed community of developers from all around the world, with 74+ people who have each contributed 100+ commits. With over 1000 contributors merging over 500 commits a month, Zulip is the largest and fastest growing open source team chat project.
Come find us on the development community chat!
Getting started
-
Contributing code. Check out our guide for new contributors to get started. We have invested in making Zulip’s code highly readable, thoughtfully tested, and easy to modify. Beyond that, we have written an extraordinary 150K words of documentation for Zulip contributors.
-
Contributing non-code. Report an issue, translate Zulip into your language, or give us feedback. We'd love to hear from you, whether you've been using Zulip for years, or are just trying it out for the first time.
-
Checking Zulip out. The best way to see Zulip in action is to drop by the Zulip community server. We also recommend reading about Zulip's unique approach to organizing conversations.
-
Running a Zulip server. Self-host Zulip directly on Ubuntu or Debian Linux, in Docker, or with prebuilt images for Digital Ocean and Render. Learn more about self-hosting Zulip.
-
Using Zulip without setting up a server. Learn about Zulip Cloud hosting options. Zulip sponsors free Zulip Cloud Standard for hundreds of worthy organizations, including fellow open-source projects.
-
Participating in outreach programs like Google Summer of Code and Outreachy.
-
Supporting Zulip. Advocate for your organization to use Zulip, become a sponsor, write a review in the mobile app stores, or help others find Zulip.
You may also be interested in reading our blog, and following us on Twitter and LinkedIn.
Zulip is distributed under the Apache 2.0 license.