diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index 84b01cf84a2ea..0b1d4058e2505 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -66,7 +66,9 @@ class << self def new_client(conn_params) PG.connect(**conn_params) rescue ::PG::Error => error - if conn_params && conn_params[:dbname] && error.message.include?(conn_params[:dbname]) + if conn_params && conn_params[:dbname] == "postgres" + raise ActiveRecord::ConnectionNotEstablished, error.message + elsif conn_params && conn_params[:dbname] && error.message.include?(conn_params[:dbname]) raise ActiveRecord::NoDatabaseError.db_error(conn_params[:dbname]) elsif conn_params && conn_params[:user] && error.message.include?(conn_params[:user]) raise ActiveRecord::DatabaseConnectionError.username_error(conn_params[:user]) diff --git a/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb b/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb index 1a14a89582f97..1fd4b6c88cd40 100644 --- a/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb +++ b/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb @@ -78,6 +78,18 @@ def test_bad_connection end end + def test_bad_connection_to_postgres_database + connect_raises_error = proc { |**_conn_params| raise(PG::ConnectionBad, 'FATAL: database "postgres" does not exist') } + PG.stub(:connect, connect_raises_error) do + assert_raises ActiveRecord::ConnectionNotEstablished do + db_config = ActiveRecord::Base.configurations.configs_for(env_name: "arunit", name: "primary") + configuration = db_config.configuration_hash.merge(database: "postgres") + connection = ActiveRecord::Base.postgresql_connection(configuration) + connection.exec_query("SELECT 1") + end + end + end + def test_database_exists_returns_false_when_the_database_does_not_exist config = { database: "non_extant_database", adapter: "postgresql" } assert_not ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.database_exists?(config),