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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions