{"id":6090,"date":"2026-09-16T07:00:00","date_gmt":"2026-09-16T04:00:00","guid":{"rendered":"https:\/\/www.dataplatform.gr\/?p=6090"},"modified":"2026-09-16T13:56:28","modified_gmt":"2026-09-16T10:56:28","slug":"pos-energopoioyme-to-data-masking-se-postgresql","status":"publish","type":"post","link":"https:\/\/www.dataplatform.gr\/en\/pos-energopoioyme-to-data-masking-se-postgresql\/","title":{"rendered":"How to enable Data Masking in PostgreSQL"},"content":{"rendered":"<p class=\"wp-block-paragraph\">In this article we will see how we can implement data anonymization and masking in a PostgreSQL 14 database using the extension <strong>PostgreSQL Anonymizer<\/strong>We will cover the installation process, setting up masking rules, as well as the specifics we encounter in this version regarding Transparent Dynamic Masking and the use of Views.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The installation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To install the extension on RHEL Unix, run the following:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\" data-no-translation=\"\" data-no-auto-translation=\"\">sudo yum install -y postgresql_anonymizer_14<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">In order for PostgreSQL to load the extension into its core, we need to declare it in the <code>shared_preload_libraries<\/code> in the <code>postgresql.conf<\/code>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\" data-no-translation=\"\" data-no-auto-translation=\"\">su postgres\nvi $PGDATA\/postgresql.conf<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Add or modify the line:<\/p>\n\n\n\n<pre class=\"wp-block-code\" data-no-translation=\"\" data-no-auto-translation=\"\"><code>shared_preload_libraries = 'anon'<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then, we restart the PostgreSQL service for the changes to take effect:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\" data-no-translation=\"\" data-no-auto-translation=\"\">sudo systemctl restart postgresql-14<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Now we connect to our database and activate the extension:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\" data-no-translation=\"\" data-no-auto-translation=\"\">CREATE EXTENSION anon CASCADE;\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><em>(Optionally, if the architecture and version allow it, we enable transparent masking at the base level)<\/em>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\" data-no-translation=\"\" data-no-auto-translation=\"\">ALTER DATABASE db_test SET anon.transparent_dynamic_masking TO true;\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><em>(Note: After this command you may need to re-enter <code>sudo systemctl restart postgresql-14<\/code>)<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To check that it is activated, run the following:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\" data-no-translation=\"\" data-no-auto-translation=\"\">SELECT name, setting \nFROM pg_settings \nWHERE name = 'anon.transparent_dynamic_masking';<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How do we define Masking rules?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We can define masking at the column level using <code>SECURITY LABEL<\/code>For example, in the table <code>customers<\/code> We apply masking to emails, countries and partial hiding to surnames:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\" data-no-translation=\"\" data-no-auto-translation=\"\">SECURITY LABEL FOR anon ON COLUMN public.customers.email \nIS 'MASKED WITH FUNCTION anon.fake_email()';\n\nSECURITY LABEL FOR anon ON COLUMN public.customers.country \nIS 'MASKED WITH FUNCTION anon.fake_country()';\n\nSECURITY LABEL FOR anon ON COLUMN public.customers.last_name \nIS 'MASKED WITH FUNCTION anon.partial(last_name, 1, $$***$$, 1)';<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The function <code>partial()<\/code> is extremely useful as it allows us to keep a certain number of characters visible at the beginning and end, filling the spaces in between with a symbol (such as <code>***<\/code>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Its syntax is:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>prefix<\/strong>: Number of characters that remain visible at the beginning.<\/li>\n\n\n\n<li><strong>padding<\/strong>: The symbol with which the intermediate characters will be covered (e.g. <code>***<\/code>).<\/li>\n\n\n\n<li><strong>suffix<\/strong>: Number of characters that remain visible at the end.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"867\" height=\"534\" src=\"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2026\/08\/pgtdm-03.png\" alt=\"\" class=\"wp-image-6125\" srcset=\"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2026\/08\/pgtdm-03.png 867w, https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2026\/08\/pgtdm-03-300x185.png 300w, https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2026\/08\/pgtdm-03-768x473.png 768w, https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2026\/08\/pgtdm-03-18x12.png 18w\" sizes=\"auto, (max-width: 867px) 100vw, 867px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Roles and Rights Management<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To define which users are affected by masking, we use security labels on roles. Defining a user as <strong>Masked<\/strong> means that the data will be seen masked as long as the mechanism is active:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\" data-no-translation=\"\" data-no-auto-translation=\"\">SECURITY LABEL FOR anon ON ROLE test_user IS 'MASKED';<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Important Note about Dynamic Masking:<\/strong> The rules of hiding it <code>pg_anon<\/code> are only successfully applied when the table is called by its simple name (e.g. <code>SELECT * FROM customers<\/code>). If the query contains a name with the schema (e.g. <code>SELECT * FROM public.customers<\/code>), the mechanism may be bypassed and the user may gain access to the normal, raw data.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Defining a user as <strong>Admin<\/strong>  means that it always sees the real data:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\" data-no-translation=\"\" data-no-auto-translation=\"\">SECURITY LABEL FOR anon ON ROLE test_user IS 'ADMIN';\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If we want to remove the masking rules, we run:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\" data-no-translation=\"\" data-no-auto-translation=\"\">SECURITY LABEL FOR anon ON COLUMN public.customers.email IS NULL;\nSECURITY LABEL FOR anon ON TABLE public.customers IS NULL;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Data Masking via View<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The most stable and secure way to offer masked data to ordinary users (such as <code>test_user<\/code>) is the creation of a <strong>Masked View<\/strong>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\" data-no-translation=\"\" data-no-auto-translation=\"\">CREATE OR REPLACE VIEW public.customers_masked AS\nSELECT \n    customer_id,\n    first_name,\n    anon.partial(last_name, 1, '***', 1) AS last_name,\n    anon.fake_email() AS email,\n    anon.fake_country() AS country\nFROM public.customers;\n\nREVOKE SELECT ON public.customers FROM test_user;\nGRANT SELECT ON public.customers_masked TO test_user;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">In this way, when the <code>test_user<\/code> executes its query on the view:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\" data-no-translation=\"\" data-no-auto-translation=\"\">SELECT * FROM public.customers_masked;<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"828\" height=\"544\" src=\"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2026\/08\/pgtdm-01.png\" alt=\"\" class=\"wp-image-6091\" srcset=\"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2026\/08\/pgtdm-01.png 828w, https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2026\/08\/pgtdm-01-300x197.png 300w, https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2026\/08\/pgtdm-01-768x505.png 768w, https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2026\/08\/pgtdm-01-18x12.png 18w\" sizes=\"auto, (max-width: 828px) 100vw, 828px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Checking and Troubleshooting<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If we want to see which masking rules are active at any time, we run the following query:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\" data-no-translation=\"\" data-no-auto-translation=\"\">SELECT \n    obj.relname AS table_name,\n    att.attname AS column_name,\n    label.label AS masking_rule\nFROM pg_seclabel label\nJOIN pg_class obj ON label.objoid = obj.oid\nJOIN pg_attribute att ON label.objsubid = att.attnum AND label.objoid = att.attrelid\nWHERE label.provider = 'anon';<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"791\" height=\"438\" src=\"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2026\/08\/pgtdm-02.png\" alt=\"\" class=\"wp-image-6092\" srcset=\"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2026\/08\/pgtdm-02.png 791w, https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2026\/08\/pgtdm-02-300x166.png 300w, https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2026\/08\/pgtdm-02-768x425.png 768w, https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2026\/08\/pgtdm-02-18x10.png 18w\" sizes=\"auto, (max-width: 791px) 100vw, 791px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sources:<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/gitlab.com\/dalibo\/postgresql_anonymizer\" data-type=\"link\" data-id=\"https:\/\/gitlab.com\/dalibo\/postgresql_anonymizer\">PostgreSQL Anonymizer<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.postgresql.org\/docs\/current\/\" data-type=\"link\" data-id=\"https:\/\/www.postgresql.org\/docs\/current\/\">PostgreSQL 18.4 Documentation<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>","protected":false},"excerpt":{"rendered":"<p>In this article we will see how we can implement anonymization and data masking in a PostgreSQL 14 database using the PostgreSQL Anonymizer extension. We will cover the installation process, configuring masking rules, as well as the specifics we encounter in this version in relation to Transparent Dynamic Masking and the use of [\u2026]<\/p>","protected":false},"author":1,"featured_media":2376,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"[]"},"categories":[11,123],"tags":[29,124,30,176],"class_list":["post-6090","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-databases","category-postgresql","tag-databases","tag-postgresql","tag-rdbms","tag-security"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\u03a0\u03ce\u03c2 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03bf\u03cd\u03bc\u03b5 \u03c4\u03bf Data Masking \u03c3\u03b5 PostgreSQL - DataPlatform.gr<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dataplatform.gr\/en\/pos-energopoioyme-to-data-masking-se-postgresql\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u03a0\u03ce\u03c2 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03bf\u03cd\u03bc\u03b5 \u03c4\u03bf Data Masking \u03c3\u03b5 PostgreSQL - DataPlatform.gr\" \/>\n<meta property=\"og:description\" content=\"\u03a3\u03b5 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03ac\u03c1\u03b8\u03c1\u03bf \u03b8\u03b1 \u03b4\u03bf\u03cd\u03bc\u03b5 \u03c0\u03ce\u03c2 \u03bc\u03c0\u03bf\u03c1\u03bf\u03cd\u03bc\u03b5 \u03bd\u03b1 \u03b5\u03c6\u03b1\u03c1\u03bc\u03cc\u03c3\u03bf\u03c5\u03bc\u03b5 \u03b1\u03bd\u03c9\u03bd\u03c5\u03bc\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03ba\u03b1\u03b9 masking \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd \u03c3\u03b5 \u03b2\u03ac\u03c3\u03b7 \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd PostgreSQL 14 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ce\u03bd\u03c4\u03b1\u03c2 \u03c4\u03bf extension PostgreSQL Anonymizer. \u0398\u03b1 \u03ba\u03b1\u03bb\u03cd\u03c8\u03bf\u03c5\u03bc\u03b5 \u03c4\u03b7 \u03b4\u03b9\u03b1\u03b4\u03b9\u03ba\u03b1\u03c3\u03af\u03b1 \u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7\u03c2, \u03c4\u03b7 \u03c1\u03cd\u03b8\u03bc\u03b9\u03c3\u03b7 \u03c4\u03c9\u03bd \u03ba\u03b1\u03bd\u03cc\u03bd\u03c9\u03bd masking, \u03ba\u03b1\u03b8\u03ce\u03c2 \u03ba\u03b1\u03b9 \u03c4\u03b9\u03c2 \u03b9\u03b4\u03b9\u03b1\u03b9\u03c4\u03b5\u03c1\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03c0\u03bf\u03c5 \u03c3\u03c5\u03bd\u03b1\u03bd\u03c4\u03ac\u03bc\u03b5 \u03c3\u03b5 \u03b1\u03c5\u03c4\u03ae\u03bd \u03c4\u03b7\u03bd \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7 \u03c3\u03b5 \u03c3\u03c7\u03ad\u03c3\u03b7 \u03bc\u03b5 \u03c4\u03bf Transparent Dynamic Masking \u03ba\u03b1\u03b9 \u03c4\u03b7 \u03c7\u03c1\u03ae\u03c3\u03b7 \u03c4\u03c9\u03bd [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dataplatform.gr\/en\/pos-energopoioyme-to-data-masking-se-postgresql\/\" \/>\n<meta property=\"og:site_name\" content=\"DataPlatform.gr\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/dataplatform.gr\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-16T04:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-16T10:56:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/10\/db_postgresql.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Stratos Matzouranis\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Stratos Matzouranis\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/pos-energopoioyme-to-data-masking-se-postgresql\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/pos-energopoioyme-to-data-masking-se-postgresql\\\/\"},\"author\":{\"name\":\"Stratos Matzouranis\",\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/#\\\/schema\\\/person\\\/e87bf4fd02b65cb6aa0942f87245bbaf\"},\"headline\":\"\u03a0\u03ce\u03c2 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03bf\u03cd\u03bc\u03b5 \u03c4\u03bf Data Masking \u03c3\u03b5 PostgreSQL\",\"datePublished\":\"2026-09-16T04:00:00+00:00\",\"dateModified\":\"2026-09-16T10:56:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/pos-energopoioyme-to-data-masking-se-postgresql\\\/\"},\"wordCount\":56,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/pos-energopoioyme-to-data-masking-se-postgresql\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dataplatform.gr\\\/wp-content\\\/uploads\\\/2020\\\/10\\\/db_postgresql.png\",\"keywords\":[\"Databases\",\"PostgreSQL\",\"RDBMS\",\"Security\"],\"articleSection\":[\"Databases\",\"PostgreSQL\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dataplatform.gr\\\/pos-energopoioyme-to-data-masking-se-postgresql\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/pos-energopoioyme-to-data-masking-se-postgresql\\\/\",\"url\":\"https:\\\/\\\/www.dataplatform.gr\\\/pos-energopoioyme-to-data-masking-se-postgresql\\\/\",\"name\":\"\u03a0\u03ce\u03c2 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03bf\u03cd\u03bc\u03b5 \u03c4\u03bf Data Masking \u03c3\u03b5 PostgreSQL - DataPlatform.gr\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/pos-energopoioyme-to-data-masking-se-postgresql\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/pos-energopoioyme-to-data-masking-se-postgresql\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dataplatform.gr\\\/wp-content\\\/uploads\\\/2020\\\/10\\\/db_postgresql.png\",\"datePublished\":\"2026-09-16T04:00:00+00:00\",\"dateModified\":\"2026-09-16T10:56:28+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/pos-energopoioyme-to-data-masking-se-postgresql\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dataplatform.gr\\\/pos-energopoioyme-to-data-masking-se-postgresql\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/pos-energopoioyme-to-data-masking-se-postgresql\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.dataplatform.gr\\\/wp-content\\\/uploads\\\/2020\\\/10\\\/db_postgresql.png\",\"contentUrl\":\"https:\\\/\\\/www.dataplatform.gr\\\/wp-content\\\/uploads\\\/2020\\\/10\\\/db_postgresql.png\",\"width\":1280,\"height\":720},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/pos-energopoioyme-to-data-masking-se-postgresql\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u0391\u03c1\u03c7\u03b9\u03ba\u03ae\",\"item\":\"https:\\\/\\\/www.dataplatform.gr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Databases\",\"item\":\"https:\\\/\\\/www.dataplatform.gr\\\/category\\\/databases\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"PostgreSQL\",\"item\":\"https:\\\/\\\/www.dataplatform.gr\\\/category\\\/databases\\\/postgresql\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"\u03a0\u03ce\u03c2 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03bf\u03cd\u03bc\u03b5 \u03c4\u03bf Data Masking \u03c3\u03b5 PostgreSQL\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/#website\",\"url\":\"https:\\\/\\\/www.dataplatform.gr\\\/\",\"name\":\"dataplatform.gr - Sky is not the limit!\",\"description\":\"\u0398\u03b5\u03c9\u03c1\u03af\u03b1, \u03bf\u03b4\u03b7\u03b3\u03bf\u03af \u03ba\u03b1\u03b9 \u03c3\u03ba\u03ad\u03c8\u03b5\u03b9\u03c2 \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03ba\u03ac\u03bd\u03b5\u03c4\u03b5 \u03c4\u03b7 \u03b4\u03bf\u03c5\u03bb\u03b5\u03b9\u03ac \u03c3\u03b1\u03c2 \u03c0\u03b9\u03bf \u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03b9\u03ba\u03ac \u03ba\u03b1\u03b9 \u03c0\u03b9\u03bf \u03b5\u03cd\u03ba\u03bf\u03bb\u03b1 \u03c0\u03ac\u03bd\u03c9 \u03c3\u03c4\u03b9\u03c2 \u03b2\u03ac\u03c3\u03b5\u03b9\u03c2 \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd, \u03c3\u03c4\u03b7\u03bd SQL, \u03c3\u03c4\u03bf Business Intelligence \u03ba\u03b1\u03b9 \u03c3\u03c4\u03b1 \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03b3\u03b5\u03bd\u03b9\u03ba\u03cc\u03c4\u03b5\u03c1\u03b1.\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dataplatform.gr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/#organization\",\"name\":\"dataplatform.gr\",\"url\":\"https:\\\/\\\/www.dataplatform.gr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.dataplatform.gr\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/dp_logo_wbacki.png\",\"contentUrl\":\"https:\\\/\\\/www.dataplatform.gr\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/dp_logo_wbacki.png\",\"width\":322,\"height\":139,\"caption\":\"dataplatform.gr\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/dataplatform.gr\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/dataplatform-gr\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dataplatform.gr\\\/#\\\/schema\\\/person\\\/e87bf4fd02b65cb6aa0942f87245bbaf\",\"name\":\"Stratos Matzouranis\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ab973bc4bd1673c43d45de5633a624d9ad13c06902dfdd5a6e3fd9885903865e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ab973bc4bd1673c43d45de5633a624d9ad13c06902dfdd5a6e3fd9885903865e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ab973bc4bd1673c43d45de5633a624d9ad13c06902dfdd5a6e3fd9885903865e?s=96&d=mm&r=g\",\"caption\":\"Stratos Matzouranis\"},\"sameAs\":[\"https:\\\/\\\/www.dataplatform.gr\"],\"url\":\"https:\\\/\\\/www.dataplatform.gr\\\/en\\\/author\\\/stratos-matzouranis\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u03a0\u03ce\u03c2 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03bf\u03cd\u03bc\u03b5 \u03c4\u03bf Data Masking \u03c3\u03b5 PostgreSQL - DataPlatform.gr","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dataplatform.gr\/en\/pos-energopoioyme-to-data-masking-se-postgresql\/","og_locale":"en_US","og_type":"article","og_title":"\u03a0\u03ce\u03c2 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03bf\u03cd\u03bc\u03b5 \u03c4\u03bf Data Masking \u03c3\u03b5 PostgreSQL - DataPlatform.gr","og_description":"\u03a3\u03b5 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03ac\u03c1\u03b8\u03c1\u03bf \u03b8\u03b1 \u03b4\u03bf\u03cd\u03bc\u03b5 \u03c0\u03ce\u03c2 \u03bc\u03c0\u03bf\u03c1\u03bf\u03cd\u03bc\u03b5 \u03bd\u03b1 \u03b5\u03c6\u03b1\u03c1\u03bc\u03cc\u03c3\u03bf\u03c5\u03bc\u03b5 \u03b1\u03bd\u03c9\u03bd\u03c5\u03bc\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03ba\u03b1\u03b9 masking \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd \u03c3\u03b5 \u03b2\u03ac\u03c3\u03b7 \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd PostgreSQL 14 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ce\u03bd\u03c4\u03b1\u03c2 \u03c4\u03bf extension PostgreSQL Anonymizer. \u0398\u03b1 \u03ba\u03b1\u03bb\u03cd\u03c8\u03bf\u03c5\u03bc\u03b5 \u03c4\u03b7 \u03b4\u03b9\u03b1\u03b4\u03b9\u03ba\u03b1\u03c3\u03af\u03b1 \u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7\u03c2, \u03c4\u03b7 \u03c1\u03cd\u03b8\u03bc\u03b9\u03c3\u03b7 \u03c4\u03c9\u03bd \u03ba\u03b1\u03bd\u03cc\u03bd\u03c9\u03bd masking, \u03ba\u03b1\u03b8\u03ce\u03c2 \u03ba\u03b1\u03b9 \u03c4\u03b9\u03c2 \u03b9\u03b4\u03b9\u03b1\u03b9\u03c4\u03b5\u03c1\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03c0\u03bf\u03c5 \u03c3\u03c5\u03bd\u03b1\u03bd\u03c4\u03ac\u03bc\u03b5 \u03c3\u03b5 \u03b1\u03c5\u03c4\u03ae\u03bd \u03c4\u03b7\u03bd \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7 \u03c3\u03b5 \u03c3\u03c7\u03ad\u03c3\u03b7 \u03bc\u03b5 \u03c4\u03bf Transparent Dynamic Masking \u03ba\u03b1\u03b9 \u03c4\u03b7 \u03c7\u03c1\u03ae\u03c3\u03b7 \u03c4\u03c9\u03bd [&hellip;]","og_url":"https:\/\/www.dataplatform.gr\/en\/pos-energopoioyme-to-data-masking-se-postgresql\/","og_site_name":"DataPlatform.gr","article_publisher":"https:\/\/www.facebook.com\/dataplatform.gr\/","article_published_time":"2026-09-16T04:00:00+00:00","article_modified_time":"2026-09-16T10:56:28+00:00","og_image":[{"width":1280,"height":720,"url":"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/10\/db_postgresql.png","type":"image\/png"}],"author":"Stratos Matzouranis","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Stratos Matzouranis","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dataplatform.gr\/pos-energopoioyme-to-data-masking-se-postgresql\/#article","isPartOf":{"@id":"https:\/\/www.dataplatform.gr\/pos-energopoioyme-to-data-masking-se-postgresql\/"},"author":{"name":"Stratos Matzouranis","@id":"https:\/\/www.dataplatform.gr\/#\/schema\/person\/e87bf4fd02b65cb6aa0942f87245bbaf"},"headline":"\u03a0\u03ce\u03c2 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03bf\u03cd\u03bc\u03b5 \u03c4\u03bf Data Masking \u03c3\u03b5 PostgreSQL","datePublished":"2026-09-16T04:00:00+00:00","dateModified":"2026-09-16T10:56:28+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dataplatform.gr\/pos-energopoioyme-to-data-masking-se-postgresql\/"},"wordCount":56,"commentCount":0,"publisher":{"@id":"https:\/\/www.dataplatform.gr\/#organization"},"image":{"@id":"https:\/\/www.dataplatform.gr\/pos-energopoioyme-to-data-masking-se-postgresql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/10\/db_postgresql.png","keywords":["Databases","PostgreSQL","RDBMS","Security"],"articleSection":["Databases","PostgreSQL"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dataplatform.gr\/pos-energopoioyme-to-data-masking-se-postgresql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dataplatform.gr\/pos-energopoioyme-to-data-masking-se-postgresql\/","url":"https:\/\/www.dataplatform.gr\/pos-energopoioyme-to-data-masking-se-postgresql\/","name":"\u03a0\u03ce\u03c2 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03bf\u03cd\u03bc\u03b5 \u03c4\u03bf Data Masking \u03c3\u03b5 PostgreSQL - DataPlatform.gr","isPartOf":{"@id":"https:\/\/www.dataplatform.gr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dataplatform.gr\/pos-energopoioyme-to-data-masking-se-postgresql\/#primaryimage"},"image":{"@id":"https:\/\/www.dataplatform.gr\/pos-energopoioyme-to-data-masking-se-postgresql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/10\/db_postgresql.png","datePublished":"2026-09-16T04:00:00+00:00","dateModified":"2026-09-16T10:56:28+00:00","breadcrumb":{"@id":"https:\/\/www.dataplatform.gr\/pos-energopoioyme-to-data-masking-se-postgresql\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dataplatform.gr\/pos-energopoioyme-to-data-masking-se-postgresql\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dataplatform.gr\/pos-energopoioyme-to-data-masking-se-postgresql\/#primaryimage","url":"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/10\/db_postgresql.png","contentUrl":"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/10\/db_postgresql.png","width":1280,"height":720},{"@type":"BreadcrumbList","@id":"https:\/\/www.dataplatform.gr\/pos-energopoioyme-to-data-masking-se-postgresql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u0391\u03c1\u03c7\u03b9\u03ba\u03ae","item":"https:\/\/www.dataplatform.gr\/"},{"@type":"ListItem","position":2,"name":"Databases","item":"https:\/\/www.dataplatform.gr\/category\/databases\/"},{"@type":"ListItem","position":3,"name":"PostgreSQL","item":"https:\/\/www.dataplatform.gr\/category\/databases\/postgresql\/"},{"@type":"ListItem","position":4,"name":"\u03a0\u03ce\u03c2 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03bf\u03cd\u03bc\u03b5 \u03c4\u03bf Data Masking \u03c3\u03b5 PostgreSQL"}]},{"@type":"WebSite","@id":"https:\/\/www.dataplatform.gr\/#website","url":"https:\/\/www.dataplatform.gr\/","name":"dataplatform.gr - Sky is not the limit!","description":"\u0398\u03b5\u03c9\u03c1\u03af\u03b1, \u03bf\u03b4\u03b7\u03b3\u03bf\u03af \u03ba\u03b1\u03b9 \u03c3\u03ba\u03ad\u03c8\u03b5\u03b9\u03c2 \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03ba\u03ac\u03bd\u03b5\u03c4\u03b5 \u03c4\u03b7 \u03b4\u03bf\u03c5\u03bb\u03b5\u03b9\u03ac \u03c3\u03b1\u03c2 \u03c0\u03b9\u03bf \u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03b9\u03ba\u03ac \u03ba\u03b1\u03b9 \u03c0\u03b9\u03bf \u03b5\u03cd\u03ba\u03bf\u03bb\u03b1 \u03c0\u03ac\u03bd\u03c9 \u03c3\u03c4\u03b9\u03c2 \u03b2\u03ac\u03c3\u03b5\u03b9\u03c2 \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd, \u03c3\u03c4\u03b7\u03bd SQL, \u03c3\u03c4\u03bf Business Intelligence \u03ba\u03b1\u03b9 \u03c3\u03c4\u03b1 \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03b3\u03b5\u03bd\u03b9\u03ba\u03cc\u03c4\u03b5\u03c1\u03b1.","publisher":{"@id":"https:\/\/www.dataplatform.gr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dataplatform.gr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.dataplatform.gr\/#organization","name":"dataplatform.gr","url":"https:\/\/www.dataplatform.gr\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dataplatform.gr\/#\/schema\/logo\/image\/","url":"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/06\/dp_logo_wbacki.png","contentUrl":"https:\/\/www.dataplatform.gr\/wp-content\/uploads\/2020\/06\/dp_logo_wbacki.png","width":322,"height":139,"caption":"dataplatform.gr"},"image":{"@id":"https:\/\/www.dataplatform.gr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/dataplatform.gr\/","https:\/\/www.linkedin.com\/company\/dataplatform-gr\/"]},{"@type":"Person","@id":"https:\/\/www.dataplatform.gr\/#\/schema\/person\/e87bf4fd02b65cb6aa0942f87245bbaf","name":"Stratos Matzouranis","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/ab973bc4bd1673c43d45de5633a624d9ad13c06902dfdd5a6e3fd9885903865e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/ab973bc4bd1673c43d45de5633a624d9ad13c06902dfdd5a6e3fd9885903865e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ab973bc4bd1673c43d45de5633a624d9ad13c06902dfdd5a6e3fd9885903865e?s=96&d=mm&r=g","caption":"Stratos Matzouranis"},"sameAs":["https:\/\/www.dataplatform.gr"],"url":"https:\/\/www.dataplatform.gr\/en\/author\/stratos-matzouranis\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dataplatform.gr\/en\/wp-json\/wp\/v2\/posts\/6090","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dataplatform.gr\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dataplatform.gr\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dataplatform.gr\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dataplatform.gr\/en\/wp-json\/wp\/v2\/comments?post=6090"}],"version-history":[{"count":0,"href":"https:\/\/www.dataplatform.gr\/en\/wp-json\/wp\/v2\/posts\/6090\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dataplatform.gr\/en\/wp-json\/wp\/v2\/media\/2376"}],"wp:attachment":[{"href":"https:\/\/www.dataplatform.gr\/en\/wp-json\/wp\/v2\/media?parent=6090"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dataplatform.gr\/en\/wp-json\/wp\/v2\/categories?post=6090"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dataplatform.gr\/en\/wp-json\/wp\/v2\/tags?post=6090"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}