So two problems here:

1. The channel is not quoted, so case-folding will mean we always listen on (and unlisten on, below) the lowercase version of the channel
2. A user who happens to name their channel `foo; drop table users;` may have a very bad day.

The second is a little far-fetched, but it's possible, especially if the `pq` user somehow exposes an API which takes user-supplied listening channel names.

Fortunately, quoting rules for identifiers (unlike for string literals) are fairly straightforward; you can resolve this with:

```go
fmt.Sprintf(`"%s"`, strings.Replace(relname, `"`, `""`, -1))
```