I'm using PostgreSQL 9.0 and I have a table with just an artificial key (auto-incrementing sequence) and another unique key. (Yes, there is a reason for this table. :)) I want to look up an ID by the other key or, if it doesn't exist, insert it:

```
SELECT id
FROM mytable
WHERE other_key = 'SOMETHING'

```

Then, if no match:

```
INSERT INTO mytable (other_key)
VALUES ('SOMETHING')
RETURNING id

```

The question: is it possible to save a round-trip to the DB by doing both of these in one statement? I can insert the row if it doesn't exist like this:

```
INSERT INTO mytable (other_key)
SELECT 'SOMETHING'
WHERE NOT EXISTS (SELECT * FROM mytable WHERE other_key = 'SOMETHING')
RETURNING id

```

... but that doesn't give the ID of an existing row. Any ideas? There is a unique constraint on other\_key, if that helps.