Skip to content

Unable to anonymise on Postgres with capitalised column names #6

@konradmars

Description

@konradmars

Unable to anonymise on Postgres with capitalised column names

Reproduction:
0. Having Postgres database with capitalised column e.g.:
image

  1. Try to anonymise the table
    Observed:
Sep 05, 2019 7:16:34 PM com.github.dataanon.jdbc.TableReader <init>
INFO: READ SQL: SELECT "DESCRIPTION","FAILURE_REASON","ID" FROM "AO_88263F_HEALTH_CHECK_STATUS"
Sep 05, 2019 7:16:34 PM org.jline.utils.Log logr
WARNING: Unable to create a system terminal, creating a dumb terminal (enable debug logging for more information)
Sep 05, 2019 7:16:34 PM com.github.dataanon.jdbc.TableWriter <init>
INFO: WRITE SQL: UPDATE "AO_88263F_HEALTH_CHECK_STATUS" SET  "DESCRIPTION" = ? ,  "FAILURE_REASON" = ?  WHERE  "ID" = ? 
Sep 05, 2019 7:16:35 PM com.github.dataanon.dsl.Strategy executeOnTable
SEVERE: Error processing table '"AO_88263F_HEALTH_CHECK_STATUS"': org.postgresql.util.PSQLException: The column name "DESCRIPTION" was not found in this ResultSet.
reactor.core.Exceptions$BubblingException: org.postgresql.util.PSQLException: The column name "DESCRIPTION" was not found in this ResultSet.
	at reactor.core.Exceptions.bubble(Exceptions.java:154)
	at reactor.core.publisher.Operators.onErrorDropped(Operators.java:263)
	at reactor.core.publisher.BaseSubscriber.onError(BaseSubscriber.java:182)
	at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onError(FluxMapFuseable.java:128)
	at reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:235)
	at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:202)
	at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:156)
	at reactor.core.publisher.BaseSubscriber.request(BaseSubscriber.java:212)
	at com.github.dataanon.jdbc.TableWriter.hookOnSubscribe(TableWriter.kt:36)
	at reactor.core.publisher.BaseSubscriber.onSubscribe(BaseSubscriber.java:146)
	at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onSubscribe(FluxMapFuseable.java:90)
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:140)
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:64)
	at reactor.core.publisher.FluxMapFuseable.subscribe(FluxMapFuseable.java:63)
	at com.github.dataanon.dsl.Strategy.executeOnTable(Strategy.kt:40)
	at com.github.dataanon.dsl.Strategy.access$executeOnTable(Strategy.kt:16)
	at com.github.dataanon.dsl.Strategy$execute$1.accept(Strategy.kt:29)
	at com.github.dataanon.dsl.Strategy$execute$1.accept(Strategy.kt:16)
	at reactor.core.publisher.LambdaSubscriber.onNext(LambdaSubscriber.java:130)
	at reactor.core.publisher.FluxPublishOn$PublishOnSubscriber.runAsync(FluxPublishOn.java:396)
	at reactor.core.publisher.FluxPublishOn$PublishOnSubscriber.run(FluxPublishOn.java:480)
	at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:84)
	at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:37)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
Caused by: org.postgresql.util.PSQLException: The column name "DESCRIPTION" was not found in this ResultSet.
	at org.postgresql.jdbc.PgResultSet.findColumn(PgResultSet.java:2548)
	at org.postgresql.jdbc.PgResultSet.getObject(PgResultSet.java:2539)
	at com.github.dataanon.jdbc.TableReader.columnValue(TableReader.kt:37)
	at com.github.dataanon.jdbc.TableReader.toField(TableReader.kt:34)
	at com.github.dataanon.jdbc.TableReader.next(TableReader.kt:31)
	at com.github.dataanon.jdbc.TableReader.next(TableReader.kt:9)
	at reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:231)
	... 24 more

Expected: All works well

The anonymise function:

fun BlacklistTable.anonymizeHealthCheckStatus() {
    anonymize("\"DESCRIPTION\"").using(RandomFormattedString())
    anonymize("\"FAILURE_REASON\"").using(RandomFormattedString())
}

Note the column names need to be in quotes. Without it Postgres auto-decapitalise column name (lowercase column will not be found).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions