I find this really weird. If we will look at the major programming languages they all use "||" as logical "or" operator. Is there any (maybe historical) reason why "||" is living in PostgreSQL along with CONCAT() function?
-- DB2 / Oracle / Postgres / ANSI Standard
SELECT first_name || ' ' || last_name As full_name FROM customers;
-- Sybase / SQL Server / Microsoft Access
SELECT FirstName + ' ' + LastName As FullName FROM Customers;
-- MySQL
SELECT CONCAT(`FirstName`, ' ', `LastName`) As `FullName` FROM `Customers`;
Double pipe concatenation is part of the ANSI SQL standard. SQL was initially developed at IBM deep in the mainframe era. Most of the "major programming languages" you are thinking of did not exist when SQL was created. Most modern languages are "C like" on some level but FORTRAN77, for example, uses //
as it's concatenation operator.