I am using the following schema:
CREATE TABLE person (
person_name VARCHAR PRIMARY KEY
);
CREATE TABLE pet (
animal_name VARCHAR,
person_name VARCHAR REFERENCES person(person_name),
PRIMARY KEY (animal_name, person_name)
);
I wish to create a table where, for each person_name
, I get an array with the pets of that person. I am using PostgreSQL 9.3.4.
I have the following values in each table:
Person
PERSON_NAME
-----------
Alice
Bob
Pet
ANIMAL_NAME | PERSON_NAME
-------------------------
Woof | Alice
Meow | Alice
I wish to create the following table:
PERSON_NAME | PETS
--------------------------
Alice | {Woof, Meow}
Bob | {}
I cannot, however, create the empty array. What I get is the following:
PERSON_NAME | PETS
--------------------------
Alice | {Woof, Meow}
Bob | {NULL}
This is the query I am using:
SELECT
person.person_name,
array_agg(pet.animal_name) AS pets
FROM
person LEFT JOIN pet ON person.person_name = pet.person_name
GROUP BY
person.person_name
;
I understand why I am getting the array with the NULL
value inside, I want to know how to get an empty array instead.
Here is a fiddle with the code needed to create the schema, insert the values and with the query I am using. The result shown in the website doesn't show the NULL
value, although it is there.
EDIT
The result will be parsed to JSON, that is why {NULL}
is not an acceptable result, as it will be parsed to [null]
, which is different from the []
I require. For the same reason, something like {""}
is not an acceptable result either.
Declaration of Array Types. To illustrate the use of array types, we create this table: CREATE TABLE sal_emp ( name text, pay_by_quarter integer[], schedule text[][] ); As shown, an array data type is named by appending square brackets ( [] ) to the data type name of the array elements.
1) Assigning it to a new empty array This is the fastest way to empty an array: a = []; This code assigned the array a to a new empty array. It works perfectly if you do not have any references to the original array.
Oracle reads empty strings as NULLs, while PostgreSQL treats them as empty. Concatenating NULL values with non-NULL characters results in that character in Oracle, but NULL in PostgreSQL. Oracle and PostgreSQL behave similarly in many cases, but one way they differ is in their treatment of NULLs and empty strings.
By knowing the number of elements in the array, you can tell if it is empty or not. An empty array will have 0 elements inside of it. Let's run through some examples.
I just wanna add tho this is 6 years old
array[]::varchar[]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With