[Proposal] Table-level Transparent Data Encryption (TDE) and Key Management Service (KMS)

Started by Moon, Insungalmost 8 years ago487 messageshackers
Jump to latest
#1Moon, Insung
Moon_Insung_i3@lab.ntt.co.jp

Hello Hackers,

This propose a way to develop "Table-level" Transparent Data Encryption (TDE) and Key Management Service (KMS) support in
PostgreSQL.

Issues on data encryption of PostgreSQL
==========
Currently, in PostgreSQL, data encryption can be using pgcrypto Tool.
However, it is inconvenient to use pgcrypto to encrypts data in some cases.

There are two significant inconveniences.

First, if we use pgcrypto to encrypt/decrypt data, we must call pgcrypto functions everywhere we encrypt/decrypt.
Second, we must modify application program code much if we want to do database migration to PostgreSQL from other databases that is
using TDE.

To resolved these inconveniences, many users want to support TDE.
There have also been a few proposals, comments, and questions to support TDE in the PostgreSQL community.

However, currently PostgreSQL does not support TDE, so in development community, there are discussions whether it's necessary to
support TDE or not.

In these discussions, there were requirements necessary to support TDE in PostgreSQL.

1) The performance overhead of encryption and decryption database data must be minimized
2) Need to support WAL encryption.
3) Need to support Key Management Service.

Therefore, I'd like to propose the new design of TDE that deals with both above requirements.
Since this feature will become very large, I'd like to hear opinions from community before starting making the patch.

First, my proposal is table-level TDE which is that user can specify tables begin encrypted.
Indexes, TOAST table and WAL associated with the table that enables TDE are also encrypted.

Moreover, I want to support encryption for large object as well.
But I haven't found a good way for it so far. So I'd like to remain it as future TODO.

My proposal has five characteristics features of "table-level TDE".

1) Buffer-level data encryption and decryption
2) Per-table encryption
3) 2-tier encryption key management
4) Working with external key management services(KMS)
5) WAL encryption

Here are more details for each items.

1. Buffer-level data encryption and decryption
==================
Transparent data encryption and decryption accompany by storage operation
With ordinally way like using pgcrypto, the biggest problem with encrypted data is the performance overhead of decrypting the data
each time the run to queries.

My proposal is to encrypt and decrypt data when performing DISK I/O operation to minimize performance overhead.
Therefore, the data in the shared memory layer is unencrypted so that performance overhead can minimize.

With this design, data encryption/decryption implementations can be developed by modifying the codes of the storage and buffer
manager modules,
which are responsible for performing DISK I/O operation.

2. Per-table encryption
==================
User can enable TDE per table as they want.
I introduce new storage parameter "encryption_enabled" which enables TDE at table-level.

// Generate the encryption table
CREATE TABLE foo WITH ( ENCRYPTION_ENABLED = ON );

// Change to the non-encryption table
ALTER TABLE foo SET ( ENCRYPTION_ENABLED = OFF );

This approach minimizes the overhead for tables that do not require encryption options.
For tables that enable TDE, the corresponding table key will be generated with random values, and it's stored into the new system
catalog after being encrypted by the master key.

BTW, I want to support CBC mode encryption[3]What does CBC-Mode mean?. However, I'm not sure how to use the IV in CBC mode for this proposal.
I'd like to hear opinions by security engineer.

3. 2-tier encryption key management
==================
when it comes time to change cryptographic keys, there is a performance overhead to decryption and re-encryption to all data.

To solve this problem we employee 2-tier encryption.
2-tier encryption is All table keys can be stored in the database cluster after being encrypted by the master key, And master keys
must be stored at external of PostgreSQL.

Therefore, without master key, it is impossible to decrypt the table key. Thus, It is impossible to decrypt the database data.

When changing the key, it's not necessary to re-encrypt for all data.
We use the new master key only to decrypt and re-encrypt the table key, these operations for minimizing the performance overhead.

For table keys, all TDE-enabled tables have different table keys.
And for master key, all database have different master keys. Table keys are encrypted by the master key of its own database.
For WAL encryption, we have another cryptographic key. WAL-key is also encrypted by a master key, but it is shared across the
database cluster.

4. Working with external key management services(KMS)
==================
A key management service is an integrated approach for generating, fetching and managing encryption keys for key control.
They may cover all aspects of security from the secure generation of keys, secure storing keys, and secure fetching keys up to
encryption key handling.
Also, various types of KMSs are provided by many companies, and users can choose them.

Therefore I would like to manage the master key using KMS.
Also, my proposal is to create callback APIs(generate_key, fetch_key, store_key) in the form of a plug-in so that users can use many
types of KMS as they want.

In KMIP protocol and most KMS manage keys by string IDs. We can get keys by key ID from KMS.
So in my proposal, all master keys are distinguished by its ID, called "master key ID".
The master key ID is made, for example, using the database oid and a sequence number, like <OID>_<SeqNo>. And they are managed in
PostgreSQL.

When database startup, all master key ID is loaded to shared memory, and they are protected by LWLock.

When it comes time to rotate the master keys, run this query.

ALTER SYSTEM ROTATION MASTER KEY;

In this query, the master key is rotated with the following step.
1. Generate new master key,
2. Change master key IDs and emit corresponding WAL
3. Re-encrypt all table keys on its database

Also during checkpoint, master key IDs on shared memory become a permanent condition.

5. WAL encryption
==================
If we encrypt all WAL records, performance overhead can be significant.
Therefore, this proposes a method to encrypt only WAL record excluding WAL header when writing WAL on the WAL buffer, instead of
encrypting a whole WAL record.
WAL encryption key is generated separately when the TDE-enabled table is created the first time. We use 2-tier encryption for WAL
encryption as well.
So, when it comes time to rotate the WAL encryption key, run this query.

ALTER SYSTEM ROTATION WAL KEY;

Next, I will explain how to encrypt WAL.

To do this operation, I add a flag to WAL header which indicates whether the subsequent WAL data is encrypted or not.

Then, when we write WAL for encryption table we write "encrypted" WAL on WAL buffer layer.

In recovery, we read WAL header and check the flag of encryption, and judges whether WAL must be decrypted.
In the case of PITR, we use WAL key ID in the backup file.

With this approach, the performance overhead of writing and reading the WAL for unencrypted tables would be almost the same as
before.

==================
I'd like to discuss the design before starting making any change of code.
After a more discussion I want to make a PoC.
Feedback and suggestion are very welcome.

Finally, thank you initial design input for Masahiko Sawada.

Thank you.

[1]: What does TDE mean?

https://en.wikipedia.org/wiki/Transparent_Data_Encryption

[2]: What does KMS mean?

https://en.wikipedia.org/wiki/Key_management#Key_Management_System

[3]: What does CBC-Mode mean?

https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation

[4]: Recently discussed mail /messages/by-id/CA+CSw_tb3bk5i7if6inZFc3yyf+9HEVNTy51QFBoeUk7UE_V=w@mail.gmail.com
/messages/by-id/CA+CSw_tb3bk5i7if6inZFc3yyf+9HEVNTy51QFBoeUk7UE_V=w@mail.gmail.com

Regards.
Moon.
----------------------------------------
Moon, Insung
NIPPON TELEGRAPH AND TELEPHONE CORPORATION NTT Open Source Software Center
----------------------------------------

#2Antonin Houska
ah@cybertec.at
In reply to: Moon, Insung (#1)
Re: [Proposal] Table-level Transparent Data Encryption (TDE) and Key Management Service (KMS)

Moon, Insung <Moon_Insung_i3@lab.ntt.co.jp> wrote:

This patch seems to implement some of the features you propose, especially
encryption of buffers and WAL. I recommend you to check so that no effort is
duplicated:

[4] Recently discussed mail
/messages/by-id/CA+CSw_tb3bk5i7if6inZFc3yyf+9HEVNTy51QFBoeUk7UE_V=w@mail.gmail.com

--
Antonin Houska
Cybertec Schönig & Schönig GmbH
Gröhrmühlgasse 26, A-2700 Wiener Neustadt
Web: https://www.cybertec-postgresql.com

#3Aleksander Alekseev
aleksander@timescale.com
In reply to: Moon, Insung (#1)
Re: [Proposal] Table-level Transparent Data Encryption (TDE) and Key Management Service (KMS)

Hello Moon,

I promised to email links to the articles I mentioned during your talk
on the PGCon Unconference to this thread. Here they are:

* http://cryptowiki.net/index.php?title=Order-preserving_encryption
* https://en.wikipedia.org/wiki/Homomorphic_encryption

Also I realized that I was wrong regarding encryption of the indexes
since they will be encrypted on the block level the same way the heap
will be.

--
Best regards,
Aleksander Alekseev

#4Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Moon, Insung (#1)
Re: [Proposal] Table-level Transparent Data Encryption (TDE) and Key Management Service (KMS)

On Fri, May 25, 2018 at 8:41 PM, Moon, Insung
<Moon_Insung_i3@lab.ntt.co.jp> wrote:

Hello Hackers,

This propose a way to develop "Table-level" Transparent Data Encryption (TDE) and Key Management Service (KMS) support in
PostgreSQL.

Issues on data encryption of PostgreSQL
==========
Currently, in PostgreSQL, data encryption can be using pgcrypto Tool.
However, it is inconvenient to use pgcrypto to encrypts data in some cases.

There are two significant inconveniences.

First, if we use pgcrypto to encrypt/decrypt data, we must call pgcrypto functions everywhere we encrypt/decrypt.
Second, we must modify application program code much if we want to do database migration to PostgreSQL from other databases that is
using TDE.

To resolved these inconveniences, many users want to support TDE.
There have also been a few proposals, comments, and questions to support TDE in the PostgreSQL community.

However, currently PostgreSQL does not support TDE, so in development community, there are discussions whether it's necessary to
support TDE or not.

In these discussions, there were requirements necessary to support TDE in PostgreSQL.

1) The performance overhead of encryption and decryption database data must be minimized
2) Need to support WAL encryption.
3) Need to support Key Management Service.

Therefore, I'd like to propose the new design of TDE that deals with both above requirements.
Since this feature will become very large, I'd like to hear opinions from community before starting making the patch.

First, my proposal is table-level TDE which is that user can specify tables begin encrypted.
Indexes, TOAST table and WAL associated with the table that enables TDE are also encrypted.

Moreover, I want to support encryption for large object as well.
But I haven't found a good way for it so far. So I'd like to remain it as future TODO.

My proposal has five characteristics features of "table-level TDE".

1) Buffer-level data encryption and decryption
2) Per-table encryption
3) 2-tier encryption key management
4) Working with external key management services(KMS)
5) WAL encryption

Here are more details for each items.

1. Buffer-level data encryption and decryption
==================
Transparent data encryption and decryption accompany by storage operation
With ordinally way like using pgcrypto, the biggest problem with encrypted data is the performance overhead of decrypting the data
each time the run to queries.

My proposal is to encrypt and decrypt data when performing DISK I/O operation to minimize performance overhead.
Therefore, the data in the shared memory layer is unencrypted so that performance overhead can minimize.

With this design, data encryption/decryption implementations can be developed by modifying the codes of the storage and buffer
manager modules,
which are responsible for performing DISK I/O operation.

2. Per-table encryption
==================
User can enable TDE per table as they want.
I introduce new storage parameter "encryption_enabled" which enables TDE at table-level.

// Generate the encryption table
CREATE TABLE foo WITH ( ENCRYPTION_ENABLED = ON );

// Change to the non-encryption table
ALTER TABLE foo SET ( ENCRYPTION_ENABLED = OFF );

This approach minimizes the overhead for tables that do not require encryption options.
For tables that enable TDE, the corresponding table key will be generated with random values, and it's stored into the new system
catalog after being encrypted by the master key.

BTW, I want to support CBC mode encryption[3]. However, I'm not sure how to use the IV in CBC mode for this proposal.
I'd like to hear opinions by security engineer.

3. 2-tier encryption key management
==================
when it comes time to change cryptographic keys, there is a performance overhead to decryption and re-encryption to all data.

To solve this problem we employee 2-tier encryption.
2-tier encryption is All table keys can be stored in the database cluster after being encrypted by the master key, And master keys
must be stored at external of PostgreSQL.

Therefore, without master key, it is impossible to decrypt the table key. Thus, It is impossible to decrypt the database data.

When changing the key, it's not necessary to re-encrypt for all data.
We use the new master key only to decrypt and re-encrypt the table key, these operations for minimizing the performance overhead.

For table keys, all TDE-enabled tables have different table keys.
And for master key, all database have different master keys. Table keys are encrypted by the master key of its own database.
For WAL encryption, we have another cryptographic key. WAL-key is also encrypted by a master key, but it is shared across the
database cluster.

4. Working with external key management services(KMS)
==================
A key management service is an integrated approach for generating, fetching and managing encryption keys for key control.
They may cover all aspects of security from the secure generation of keys, secure storing keys, and secure fetching keys up to
encryption key handling.
Also, various types of KMSs are provided by many companies, and users can choose them.

Therefore I would like to manage the master key using KMS.
Also, my proposal is to create callback APIs(generate_key, fetch_key, store_key) in the form of a plug-in so that users can use many
types of KMS as they want.

In KMIP protocol and most KMS manage keys by string IDs. We can get keys by key ID from KMS.
So in my proposal, all master keys are distinguished by its ID, called "master key ID".
The master key ID is made, for example, using the database oid and a sequence number, like <OID>_<SeqNo>. And they are managed in
PostgreSQL.

When database startup, all master key ID is loaded to shared memory, and they are protected by LWLock.

When it comes time to rotate the master keys, run this query.

ALTER SYSTEM ROTATION MASTER KEY;

In this query, the master key is rotated with the following step.
1. Generate new master key,
2. Change master key IDs and emit corresponding WAL
3. Re-encrypt all table keys on its database

Also during checkpoint, master key IDs on shared memory become a permanent condition.

5. WAL encryption
==================
If we encrypt all WAL records, performance overhead can be significant.
Therefore, this proposes a method to encrypt only WAL record excluding WAL header when writing WAL on the WAL buffer, instead of
encrypting a whole WAL record.
WAL encryption key is generated separately when the TDE-enabled table is created the first time. We use 2-tier encryption for WAL
encryption as well.
So, when it comes time to rotate the WAL encryption key, run this query.

ALTER SYSTEM ROTATION WAL KEY;

Next, I will explain how to encrypt WAL.

To do this operation, I add a flag to WAL header which indicates whether the subsequent WAL data is encrypted or not.

Then, when we write WAL for encryption table we write "encrypted" WAL on WAL buffer layer.

In recovery, we read WAL header and check the flag of encryption, and judges whether WAL must be decrypted.
In the case of PITR, we use WAL key ID in the backup file.

With this approach, the performance overhead of writing and reading the WAL for unencrypted tables would be almost the same as
before.

==================
I'd like to discuss the design before starting making any change of code.
After a more discussion I want to make a PoC.
Feedback and suggestion are very welcome.

Finally, thank you initial design input for Masahiko Sawada.

Thank you.

[1] What does TDE mean?

https://en.wikipedia.org/wiki/Transparent_Data_Encryption

[2] What does KMS mean?

https://en.wikipedia.org/wiki/Key_management#Key_Management_System

[3] What does CBC-Mode mean?

https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation

[4] Recently discussed mail
/messages/by-id/CA+CSw_tb3bk5i7if6inZFc3yyf+9HEVNTy51QFBoeUk7UE_V=w@mail.gmail.com

As per discussion at PGCon unconference, I think that firstly we need
to discuss what threats we want to defend database data against. If
user wants to defend against a threat that is malicious user who
logged in OS or database steals an important data on datbase this
design TDE would not help. Because such user can steal the data by
getting a memory dump or by SQL. That is of course differs depending
on system requirements or security compliance but what threats do you
want to defend database data against? and why?

Also, if I understand correctly, at unconference session there also
were two suggestions about the design other than the suggestion by
Alexander: implementing TDE at column level using POLICY, and
implementing TDE at table-space level. The former was suggested by Joe
but I'm not sure the detail of that suggestion. I'd love to hear the
deal of that suggestion. The latter was suggested by Tsunakawa-san.
Have you considered that?

You mentioned that encryption of temporary data for query processing
and large objects are still under the consideration. But other than
them you should consider the temporary data generated by other
subsystems such as reorderbuffer and transition table as well.

Regards,

--
Masahiko Sawada
NIPPON TELEGRAPH AND TELEPHONE CORPORATION
NTT Open Source Software Center

#5Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Masahiko Sawada (#4)
Re: [Proposal] Table-level Transparent Data Encryption (TDE) and Key Management Service (KMS)

On 06/11/2018 11:22 AM, Masahiko Sawada wrote:

On Fri, May 25, 2018 at 8:41 PM, Moon, Insung
<Moon_Insung_i3@lab.ntt.co.jp> wrote:

Hello Hackers,

This propose a way to develop "Table-level" Transparent Data
Encryption (TDE) and Key Management Service (KMS) support in
PostgreSQL.

...

As per discussion at PGCon unconference, I think that firstly we
need to discuss what threats we want to defend database data against.
If user wants to defend against a threat that is malicious user who
logged in OS or database steals an important data on datbase this
design TDE would not help. Because such user can steal the data by
getting a memory dump or by SQL. That is of course differs depending
on system requirements or security compliance but what threats do
you want to defend database data against? and why?

I do agree with this - a description of the threat model needs to be
part of the design discussion, otherwise it's not possible to compare it
to alternative solutions (e.g. full-disk encryption using LUKS or using
existing privilege controls and/or RLS).

TDE was proposed/discussed repeatedly in the past, and every time it
died exactly because it was not very clear which issue it was attempting
to solve.

Let me share some of the issues mentioned as possibly addressed by TDE
(I'm not entirely sure TDE actually solves them, I'm just saying those
were mentioned in previous discussions):

1) enterprise requirement - Companies want in-database encryption, for
various reasons (because "enterprise solution" or something).

2) like FDE, but OS/filesystem independent - Same config on any OS and
filesystem, which may make maintenance easier.

3) does not require special OS/filesystem setup - Does not require help
from system adminitrators, setup of LUKS devices or whatever.

4) all filesystem access (basebackups/rsync) is encrypted anyway

5) solves key management (the main challenge with pgcrypto)

6) allows encrypting only some of the data (tables, columns) to minimize
performance impact

IMHO it makes sense to have TDE even if it provides the same "security"
as disk-level encryption, assuming it's more convenient to setup/use
from the database.

Also, if I understand correctly, at unconference session there also
were two suggestions about the design other than the suggestion by
Alexander: implementing TDE at column level using POLICY, and
implementing TDE at table-space level. The former was suggested by
Joe but I'm not sure the detail of that suggestion. I'd love to hear
the deal of that suggestion. The latter was suggested by
Tsunakawa-san. Have you considered that?

You mentioned that encryption of temporary data for query processing
and large objects are still under the consideration. But other than
them you should consider the temporary data generated by other
subsystems such as reorderbuffer and transition table as well.

The severity of those limitations is likely related to the threat model.
I don't think encrypting temporary data would be a big problem, assuming
you know which key to use.

regards

--
Tomas Vondra http://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

#6Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Moon, Insung (#1)
Re: [Proposal] Table-level Transparent Data Encryption (TDE) and Key Management Service (KMS)

Hi,

On 05/25/2018 01:41 PM, Moon, Insung wrote:

Hello Hackers,

...

BTW, I want to support CBC mode encryption[3]. However, I'm not sure
how to use the IV in CBC mode for this proposal. I'd like to hear
opinions by security engineer.

I'm not a cryptographer either, but this is exactly where you need a
prior discussion about the threat models - there are a couple of
chaining modes, each with different weaknesses.

FWIW it may also matter if data_checksums are enabled, because that may
prevent malleability attacks affecting of the modes. Assuming active
attacker (with the ability to modify the data files) is part of the
threat model, of course.

regards

--
Tomas Vondra http://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

#7Joe Conway
mail@joeconway.com
In reply to: Masahiko Sawada (#4)
Re: [Proposal] Table-level Transparent Data Encryption (TDE) and Key Management Service (KMS)

On 06/11/2018 05:22 AM, Masahiko Sawada wrote:

As per discussion at PGCon unconference, I think that firstly we need
to discuss what threats we want to defend database data against.

Exactly. While certainly there is demand for encryption for the sake of
"checking a box", different designs will defend against different
threats, and we should be clear on which ones we are trying to protect
against for any particular design.

Also, if I understand correctly, at unconference session there also
were two suggestions about the design other than the suggestion by
Alexander: implementing TDE at column level using POLICY, and
implementing TDE at table-space level. The former was suggested by Joe
but I'm not sure the detail of that suggestion. I'd love to hear the
deal of that suggestion.

The idea has not been extensively fleshed out yet, but the thought was
that we create column level POLICY, which would transparently apply some
kind of transform on input and/or output. The transforms would
presumably be expressions, which in turn could use functions (extension
or builtin) to do their work. That would allow encryption/decryption,
DLP (data loss prevention) schemes (masking, redacting), etc. to be
applied based on the policies.

This, in and of itself, would not address key management. There is
probably a separate need for some kind of built in key management --
perhaps a flexible way to integrate with external systems such as Vault
for example, or maybe something self contained, or perhaps both. Or
maybe key management is really tied into the separately discussed effort
to create SQL VARIABLEs somehow.

In any case certainly a lot of room for discussion.

Joe

--
Crunchy Data - http://crunchydata.com
PostgreSQL Support for Secure Enterprises
Consulting, Training, & Open Source Development

#8Tsunakawa, Takayuki
tsunakawa.takay@jp.fujitsu.com
In reply to: Tomas Vondra (#5)
RE: [Proposal] Table-level Transparent Data Encryption (TDE) and Key Management Service (KMS)

From: Tomas Vondra [mailto:tomas.vondra@2ndquadrant.com]

Let me share some of the issues mentioned as possibly addressed by TDE
(I'm not entirely sure TDE actually solves them, I'm just saying those
were mentioned in previous discussions):

FYI, our product provides TDE like Oracle and SQL Server, which enables encryption per tablespace. Relations, WAL records and temporary files related to encrypted tablespace are encrypted.

http://www.fujitsu.com/global/products/software/middleware/opensource/postgres/

(I wonder why the web site doesn't offer the online manual... I've recognized we need to fix this situation. Anyway, I guess the downloadable trial version includes the manual.)

1) enterprise requirement - Companies want in-database encryption, for
various reasons (because "enterprise solution" or something).

To assist compliance with PCI DSS, HIPAA, etc.

2) like FDE, but OS/filesystem independent - Same config on any OS and
filesystem, which may make maintenance easier.

3) does not require special OS/filesystem setup - Does not require help
from system adminitrators, setup of LUKS devices or whatever.

4) all filesystem access (basebackups/rsync) is encrypted anyway

5) solves key management (the main challenge with pgcrypto)

6) allows encrypting only some of the data (tables, columns) to minimize
performance impact

All yes.

IMHO it makes sense to have TDE even if it provides the same "security"
as disk-level encryption, assuming it's more convenient to setup/use
from the database.

Agreed.

Regards
Takayuki Tsunakawa

#9Tsunakawa, Takayuki
tsunakawa.takay@jp.fujitsu.com
In reply to: Tomas Vondra (#6)
RE: [Proposal] Table-level Transparent Data Encryption (TDE) and Key Management Service (KMS)

From: Tomas Vondra [mailto:tomas.vondra@2ndquadrant.com]
On 05/25/2018 01:41 PM, Moon, Insung wrote:

BTW, I want to support CBC mode encryption[3]. However, I'm not sure
how to use the IV in CBC mode for this proposal. I'd like to hear
opinions by security engineer.

I'm not a cryptographer either, but this is exactly where you need a
prior discussion about the threat models - there are a couple of
chaining modes, each with different weaknesses.

Our products uses XTS, which recent FDE software like BitLocker and TrueCrypt uses instead of CBC.

https://en.wikipedia.org/wiki/Disk_encryption_theory#XTS

"According to SP 800-38E, "In the absence of authentication or access control, XTS-AES provides more protection than the other approved confidentiality-only modes against unauthorized manipulation of the encrypted data.""

FWIW it may also matter if data_checksums are enabled, because that may
prevent malleability attacks affecting of the modes. Assuming active
attacker (with the ability to modify the data files) is part of the
threat model, of course.

Encrypt the page after embedding its checksum value. If a malicious attacker modifies a page on disk, then the decrypted page would be corrupt anyway, which can be detected by checksum.

Regards
Takayuki Tsunakawa

#10Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Tomas Vondra (#5)
Re: [Proposal] Table-level Transparent Data Encryption (TDE) and Key Management Service (KMS)

On Wed, Jun 13, 2018 at 10:03 PM, Tomas Vondra
<tomas.vondra@2ndquadrant.com> wrote:

On 06/11/2018 11:22 AM, Masahiko Sawada wrote:

On Fri, May 25, 2018 at 8:41 PM, Moon, Insung
<Moon_Insung_i3@lab.ntt.co.jp> wrote:

Hello Hackers,

This propose a way to develop "Table-level" Transparent Data Encryption
(TDE) and Key Management Service (KMS) support in PostgreSQL.

...

As per discussion at PGCon unconference, I think that firstly we
need to discuss what threats we want to defend database data against.
If user wants to defend against a threat that is malicious user who logged
in OS or database steals an important data on datbase this design TDE would
not help. Because such user can steal the data by getting a memory dump or
by SQL. That is of course differs depending on system requirements or
security compliance but what threats do
you want to defend database data against? and why?

I do agree with this - a description of the threat model needs to be part of
the design discussion, otherwise it's not possible to compare it to
alternative solutions (e.g. full-disk encryption using LUKS or using
existing privilege controls and/or RLS).

TDE was proposed/discussed repeatedly in the past, and every time it died
exactly because it was not very clear which issue it was attempting to
solve.

Let me share some of the issues mentioned as possibly addressed by TDE (I'm
not entirely sure TDE actually solves them, I'm just saying those were
mentioned in previous discussions):

Thank you for sharing!

1) enterprise requirement - Companies want in-database encryption, for
various reasons (because "enterprise solution" or something).

Yes, I'm often asked it by our customers especially for database
migration from DBMS that supports TDE in order to reduce costs of
migration.

2) like FDE, but OS/filesystem independent - Same config on any OS and
filesystem, which may make maintenance easier.

3) does not require special OS/filesystem setup - Does not require help from
system adminitrators, setup of LUKS devices or whatever.

4) all filesystem access (basebackups/rsync) is encrypted anyway

5) solves key management (the main challenge with pgcrypto)

6) allows encrypting only some of the data (tables, columns) to minimize
performance impact

IMHO it makes sense to have TDE even if it provides the same "security" as
disk-level encryption, assuming it's more convenient to setup/use from the
database.

Agreed.

Also, if I understand correctly, at unconference session there also were
two suggestions about the design other than the suggestion by Alexander:
implementing TDE at column level using POLICY, and implementing TDE at
table-space level. The former was suggested by
Joe but I'm not sure the detail of that suggestion. I'd love to hear
the deal of that suggestion. The latter was suggested by
Tsunakawa-san. Have you considered that?

You mentioned that encryption of temporary data for query processing and
large objects are still under the consideration. But other than them you
should consider the temporary data generated by other subsystems such as
reorderbuffer and transition table as well.

The severity of those limitations is likely related to the threat model. I
don't think encrypting temporary data would be a big problem, assuming you
know which key to use.

Agreed. I thought the possibility of non-encrypted temporary data in
backups but since we don't include them in backups it would not be a
big problem.

Regards,

--
Masahiko Sawada
NIPPON TELEGRAPH AND TELEPHONE CORPORATION
NTT Open Source Software Center

#11Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Joe Conway (#7)
Re: [Proposal] Table-level Transparent Data Encryption (TDE) and Key Management Service (KMS)

On Wed, Jun 13, 2018 at 10:20 PM, Joe Conway <mail@joeconway.com> wrote:

On 06/11/2018 05:22 AM, Masahiko Sawada wrote:

As per discussion at PGCon unconference, I think that firstly we need
to discuss what threats we want to defend database data against.

Exactly. While certainly there is demand for encryption for the sake of
"checking a box", different designs will defend against different
threats, and we should be clear on which ones we are trying to protect
against for any particular design.

Also, if I understand correctly, at unconference session there also
were two suggestions about the design other than the suggestion by
Alexander: implementing TDE at column level using POLICY, and
implementing TDE at table-space level. The former was suggested by Joe
but I'm not sure the detail of that suggestion. I'd love to hear the
deal of that suggestion.

The idea has not been extensively fleshed out yet, but the thought was
that we create column level POLICY, which would transparently apply some
kind of transform on input and/or output. The transforms would
presumably be expressions, which in turn could use functions (extension
or builtin) to do their work. That would allow encryption/decryption,
DLP (data loss prevention) schemes (masking, redacting), etc. to be
applied based on the policies.

It seems good idea. Which does this design encrypt data on, buffer or
both buffer and disk? And does this design (per-column encryption) aim
to satisfy something specific security compliance?

This, in and of itself, would not address key management. There is
probably a separate need for some kind of built in key management --
perhaps a flexible way to integrate with external systems such as Vault
for example, or maybe something self contained, or perhaps both.

I agree to have a flexible way in order to address different
requirements. I thought that having a GUC parameter to which we store
a shell command to get encryption key is enough but considering
integration with various key managements seamlessly I think that we
need to have APIs for key managements. (fetching key, storing key,
generating key etc)

Or
maybe key management is really tied into the separately discussed effort
to create SQL VARIABLEs somehow.

Could you elaborate on how key management is tied into SQL VARIABLEs?

Regards,

--
Masahiko Sawada
NIPPON TELEGRAPH AND TELEPHONE CORPORATION
NTT Open Source Software Center

#12Joe Conway
mail@joeconway.com
In reply to: Masahiko Sawada (#11)
Re: [Proposal] Table-level Transparent Data Encryption (TDE) and Key Management Service (KMS)

On 06/14/2018 12:19 PM, Masahiko Sawada wrote:

On Wed, Jun 13, 2018 at 10:20 PM, Joe Conway <mail@joeconway.com> wrote:

The idea has not been extensively fleshed out yet, but the thought was
that we create column level POLICY, which would transparently apply some
kind of transform on input and/or output. The transforms would
presumably be expressions, which in turn could use functions (extension
or builtin) to do their work. That would allow encryption/decryption,
DLP (data loss prevention) schemes (masking, redacting), etc. to be
applied based on the policies.

Which does this design encrypt data on, buffer or both buffer and
disk?

The point of the design is simply to provide a mechanism for input and
output transformation, not to provide the transform function itself.

How you use that transformation would be entirely up to you, but if you
were providing an encryption transform on input the data would be
encrypted both buffer and disk.

And does this design (per-column encryption) aim to satisfy something
specific security compliance?

Again, entirely up to you and dependent on what type of transformation
you provide. If, for example you provided input encryption and output
decryption based on some in memory session variable key, that would be
essentially TDE and would satisfy several common sets of compliance
requirements.

This, in and of itself, would not address key management. There is
probably a separate need for some kind of built in key management --
perhaps a flexible way to integrate with external systems such as Vault
for example, or maybe something self contained, or perhaps both.

I agree to have a flexible way in order to address different
requirements. I thought that having a GUC parameter to which we store
a shell command to get encryption key is enough but considering
integration with various key managements seamlessly I think that we
need to have APIs for key managements. (fetching key, storing key,
generating key etc)

I don't like the idea of yet another path for arbitrary shell code
execution. An API for extension code would be preferable.

Or
maybe key management is really tied into the separately discussed effort
to create SQL VARIABLEs somehow.

Could you elaborate on how key management is tied into SQL VARIABLEs?

Well, the key management probably is not, but the SQL VARIABLE might be
where the key is stored for use.

Joe

--
Crunchy Data - http://crunchydata.com
PostgreSQL Support for Secure Enterprises
Consulting, Training, & Open Source Development

#13Robert Haas
robertmhaas@gmail.com
In reply to: Joe Conway (#7)
Re: [Proposal] Table-level Transparent Data Encryption (TDE) and Key Management Service (KMS)

On Wed, Jun 13, 2018 at 9:20 AM, Joe Conway <mail@joeconway.com> wrote:

Also, if I understand correctly, at unconference session there also
were two suggestions about the design other than the suggestion by
Alexander: implementing TDE at column level using POLICY, and
implementing TDE at table-space level. The former was suggested by Joe
but I'm not sure the detail of that suggestion. I'd love to hear the
deal of that suggestion.

The idea has not been extensively fleshed out yet, but the thought was
that we create column level POLICY, which would transparently apply some
kind of transform on input and/or output. The transforms would
presumably be expressions, which in turn could use functions (extension
or builtin) to do their work. That would allow encryption/decryption,
DLP (data loss prevention) schemes (masking, redacting), etc. to be
applied based on the policies.

It seems to me that column-level encryption is a lot less secure than
block-level encryption. I am supposing here that the attack vector is
stealing the disk. If all you've got is a bunch of 8192-byte blocks,
it's unlikely you can infer much about the contents. You know the
size of the relations and that's probably about it. If you've got
individual values being encrypted, then there's more latitude to
figure stuff out. You can infer something about the length of
particular values. Perhaps you can find cases where the same
encrypted value appears multiple times. If there's a btree index, you
know the ordering of the values under whatever ordering semantics
apply to that index. It's unclear to me how useful such information
would be in practice or to what extent it might allow you to attack
the underlying cryptography, but it seems like there might be cases
where the information leakage is significant. For example, suppose
you're trying to determine which partially-encrypted record is that of
Aaron Aardvark... or this guy:
https://en.wikipedia.org/wiki/Hubert_Blaine_Wolfeschlegelsteinhausenbergerdorff,_Sr.

Recently, it was suggested to me that a use case for column-level
encryption might be to prevent casual DBA snooping. So, you'd want
the data to appear in pg_dump output encrypted, because the DBA might
otherwise look at it, but you wouldn't really be concerned about the
threat of the DBA loading a hostile C module that would steal user
keys and use them to decrypt all the data, because they don't care
that much and would be fired if they were caught doing it.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

#14Joe Conway
mail@joeconway.com
In reply to: Robert Haas (#13)
Re: [Proposal] Table-level Transparent Data Encryption (TDE) and Key Management Service (KMS)

On 06/18/2018 09:49 AM, Robert Haas wrote:

On Wed, Jun 13, 2018 at 9:20 AM, Joe Conway <mail@joeconway.com> wrote:

Also, if I understand correctly, at unconference session there also
were two suggestions about the design other than the suggestion by
Alexander: implementing TDE at column level using POLICY, and
implementing TDE at table-space level. The former was suggested by Joe
but I'm not sure the detail of that suggestion. I'd love to hear the
deal of that suggestion.

The idea has not been extensively fleshed out yet, but the thought was
that we create column level POLICY, which would transparently apply some
kind of transform on input and/or output. The transforms would
presumably be expressions, which in turn could use functions (extension
or builtin) to do their work. That would allow encryption/decryption,
DLP (data loss prevention) schemes (masking, redacting), etc. to be
applied based on the policies.

It seems to me that column-level encryption is a lot less secure than
block-level encryption. I am supposing here that the attack vector is
stealing the disk. If all you've got is a bunch of 8192-byte blocks,
it's unlikely you can infer much about the contents. You know the
size of the relations and that's probably about it.

Not necessarily. Our pages probably have enough predictable bytes to aid
cryptanalysis, compared to user data in a column which might not be very
predicable.

If you've got individual values being encrypted, then there's more
latitude to figure stuff out. You can infer something about the
length of particular values. Perhaps you can find cases where the
same encrypted value appears multiple times.

This completely depends on the encryption scheme you are using, and the
column level POLICY leaves that entirely up to you.

But in any case most encryption schemes use a random nonce (salt) to
ensure two identical strings do not encrypt to the same result. And
often the encrypted length is padded, so while you might be able to
infer short versus long, you would not usually be able to infer the
exact plaintext length.

If there's a btree index, you know the ordering of the values under
whatever ordering semantics apply to that index. It's unclear to me
how useful such information would be in practice or to what extent it
might allow you to attack the underlying cryptography, but it seems
like there might be cases where the information leakage is
significant. For example, suppose you're trying to determine which
partially-encrypted record is that of Aaron Aardvark... or this guy:
https://en.wikipedia.org/wiki/Hubert_Blaine_Wolfeschlegelsteinhausenbergerdorff,_Sr.

Again, this only applies if your POLICY uses this type of encryption,
i.e. homomorphic encryption. If you use strong encryption you will not
be indexing those columns at all, which is pretty commonly the case.

Recently, it was suggested to me that a use case for column-level
encryption might be to prevent casual DBA snooping. So, you'd want
the data to appear in pg_dump output encrypted, because the DBA might
otherwise look at it, but you wouldn't really be concerned about the
threat of the DBA loading a hostile C module that would steal user
keys and use them to decrypt all the data, because they don't care
that much and would be fired if they were caught doing it.

Again completely dependent on the extension you use to do the encryption
for the input policy. The keys don't need to be stored with the data,
and the decryption can be transparent only for certain users or if
certain session variables exist which the DBA does not have access to.

Joe

--
Crunchy Data - http://crunchydata.com
PostgreSQL Support for Secure Enterprises
Consulting, Training, & Open Source Development

#15Robert Haas
robertmhaas@gmail.com
In reply to: Joe Conway (#14)
Re: [Proposal] Table-level Transparent Data Encryption (TDE) and Key Management Service (KMS)

On Mon, Jun 18, 2018 at 10:12 AM, Joe Conway <mail@joeconway.com> wrote:

Not necessarily. Our pages probably have enough predictable bytes to aid
cryptanalysis, compared to user data in a column which might not be very
predicable.

Really? I would guess that the amount of entropy in a page is WAY
higher than in an individual column value.

But in any case most encryption schemes use a random nonce (salt) to
ensure two identical strings do not encrypt to the same result. And
often the encrypted length is padded, so while you might be able to
infer short versus long, you would not usually be able to infer the
exact plaintext length.

Sure, that could be done, although it means that equality comparisons
must be done unencrypted.

Again completely dependent on the extension you use to do the encryption
for the input policy. The keys don't need to be stored with the data,
and the decryption can be transparent only for certain users or if
certain session variables exist which the DBA does not have access to.

Not arguing with that. And to be clear, I'm not trying to attack your
proposal. I'm just trying to have a discussion about advantages and
disadvantages of different approaches.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

#16Joe Conway
mail@joeconway.com
In reply to: Robert Haas (#15)
Re: [Proposal] Table-level Transparent Data Encryption (TDE) and Key Management Service (KMS)

On 06/18/2018 10:26 AM, Robert Haas wrote:

On Mon, Jun 18, 2018 at 10:12 AM, Joe Conway <mail@joeconway.com> wrote:

Not necessarily. Our pages probably have enough predictable bytes to aid
cryptanalysis, compared to user data in a column which might not be very
predicable.

Really? I would guess that the amount of entropy in a page is WAY
higher than in an individual column value.

It isn't about the entropy of the page overall, it is about the
predictability of specific bytes at specific locations on the pages. At
least as far as I understand it.

But in any case most encryption schemes use a random nonce (salt) to
ensure two identical strings do not encrypt to the same result. And
often the encrypted length is padded, so while you might be able to
infer short versus long, you would not usually be able to infer the
exact plaintext length.

Sure, that could be done, although it means that equality comparisons
must be done unencrypted.

Sure. Typically equality comparisons are done on other unencrypted
attributes. Or if you need to do equality on encrypted columns, you can
store non-reversible cryptographic hashes in a separate column.

Again completely dependent on the extension you use to do the encryption
for the input policy. The keys don't need to be stored with the data,
and the decryption can be transparent only for certain users or if
certain session variables exist which the DBA does not have access to.

Not arguing with that. And to be clear, I'm not trying to attack your
proposal. I'm just trying to have a discussion about advantages and
disadvantages of different approaches.

Understood. Ultimately we might want both page-level encryption and
column level POLICY, as they are each useful for different use-cases.
Personally I believe the former is more generally useful than the
latter, but YMMV.

Joe

--
Crunchy Data - http://crunchydata.com
PostgreSQL Support for Secure Enterprises
Consulting, Training, & Open Source Development

#17Tom Lane
tgl@sss.pgh.pa.us
In reply to: Robert Haas (#15)
Re: [Proposal] Table-level Transparent Data Encryption (TDE) and Key Management Service (KMS)

Robert Haas <robertmhaas@gmail.com> writes:

On Mon, Jun 18, 2018 at 10:12 AM, Joe Conway <mail@joeconway.com> wrote:

Not necessarily. Our pages probably have enough predictable bytes to aid
cryptanalysis, compared to user data in a column which might not be very
predicable.

Really? I would guess that the amount of entropy in a page is WAY
higher than in an individual column value.

Depending on the specifics of the encryption scheme, having some amount
of known (or guessable) plaintext may allow breaking the cipher, even
if much of the plaintext is not known. This is cryptology 101, really.

At the same time, having to have a bunch of independently-decipherable
short field values is not real secure either, especially if they're known
to all be encrypted with the same key. But what you know or can guess
about the plaintext in such cases would be target-specific, rather than
an attack that could be built once and used against any PG database.

regards, tom lane

#18Joe Conway
mail@joeconway.com
In reply to: Tom Lane (#17)
Re: [Proposal] Table-level Transparent Data Encryption (TDE) and Key Management Service (KMS)

On 06/18/2018 10:52 AM, Tom Lane wrote:

Robert Haas <robertmhaas@gmail.com> writes:

On Mon, Jun 18, 2018 at 10:12 AM, Joe Conway <mail@joeconway.com> wrote:

Not necessarily. Our pages probably have enough predictable bytes to aid
cryptanalysis, compared to user data in a column which might not be very
predicable.

Really? I would guess that the amount of entropy in a page is WAY
higher than in an individual column value.

Depending on the specifics of the encryption scheme, having some amount
of known (or guessable) plaintext may allow breaking the cipher, even
if much of the plaintext is not known. This is cryptology 101, really.

Exactly

At the same time, having to have a bunch of independently-decipherable
short field values is not real secure either, especially if they're known
to all be encrypted with the same key. But what you know or can guess
about the plaintext in such cases would be target-specific, rather than
an attack that could be built once and used against any PG database.

Again is dependent on the specific solution for encryption. In some
cases you might do something like generate a single use random key,
encrypt the payload with that, encrypt the single use key with the
"global" key, append the two results and store.

Joe

--
Crunchy Data - http://crunchydata.com
PostgreSQL Support for Secure Enterprises
Consulting, Training, & Open Source Development

#19Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Joe Conway (#18)
Re: [Proposal] Table-level Transparent Data Encryption (TDE) and Key Management Service (KMS)

On 06/18/2018 05:06 PM, Joe Conway wrote:

On 06/18/2018 10:52 AM, Tom Lane wrote:

Robert Haas <robertmhaas@gmail.com> writes:

On Mon, Jun 18, 2018 at 10:12 AM, Joe Conway <mail@joeconway.com> wrote:

Not necessarily. Our pages probably have enough predictable bytes to aid
cryptanalysis, compared to user data in a column which might not be very
predicable.

Really? I would guess that the amount of entropy in a page is WAY
higher than in an individual column value.

Depending on the specifics of the encryption scheme, having some
amount of known (or guessable) plaintext may allow breaking the
cipher, even if much of the plaintext is not known. This is
cryptology 101, really.

Exactly

At the same time, having to have a bunch of
independently-decipherable short field values is not real secure
either, especially if they're known to all be encrypted with the
same key. But what you know or can guess about the plaintext in
such cases would be target-specific, rather than an attack that
could be built once and used against any PG database.

Again is dependent on the specific solution for encryption. In some
cases you might do something like generate a single use random key,
encrypt the payload with that, encrypt the single use key with the
"global" key, append the two results and store.

Yeah, I suppose we could even have per-page keys, for example.

One topic I haven't seen mentioned in this thread yet is indexes. That's
a pretty significant side-channel, when built on encrypted columns. Even
if the indexes are encrypted too, you can often deduce a lot of
information from them.

So what's the plan here? Disallow indexes on encrypted columns? Index
encypted values directly? Something else?

regards

--
Tomas Vondra http://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

#20Nico Williams
nico@cryptonector.com
In reply to: Masahiko Sawada (#4)
Re: [Proposal] Table-level Transparent Data Encryption (TDE) and Key Management Service (KMS)

On Mon, Jun 11, 2018 at 06:22:22PM +0900, Masahiko Sawada wrote:

As per discussion at PGCon unconference, I think that firstly we need
to discuss what threats we want to defend database data against. If

We call that a threat model. There can be many threat models, of
course.

user wants to defend against a threat that is malicious user who
logged in OS or database steals an important data on datbase this
design TDE would not help. Because such user can steal the data by
getting a memory dump or by SQL. That is of course differs depending
on system requirements or security compliance but what threats do you
want to defend database data against? and why?

This design guards (somewhat) againts the threat of the storage theft
(e.g., because the storage is remote). It's a fine threat model to
address, but it's also a lot easier to address in the filesystem or
device drivers -- there's no need to do this in PostgreSQL itself except
so as to support it on all platforms regardless of OS capabilities.

Note that unless the pg_catalog is protected against manipulation by
remote storage, then TDE for user tables might be possible to
compromise. Like so: the attacker manipulates the pg_catalog to
escalate privelege in order to obtain the TDE keys. This argues for
full database encryption, not just specific tables or columns. But
again, this is for the threat model where the storage is the threat.

Another similar thread model is dump management, where dumps are sent
off-site where untrusted users might read them, or even edit them in the
hopes that they will be used for restores and thus compromise the
database. This is most easily addressed by just encrypting the backups
externally to PG.

Threat models where client users are the threat are easily handled by
PG's permissions system.

I think any threat model where DBAs are not the threat is just not that
interesting to address with crypto within postgres itself...

Encryption to public keys for which postgres does not have private keys
would be one way to address DBAs-as-the-thread, but this is easily done
with an extension... A small amount of syntactic sugar might help:

CREATE ROLE "bar" WITH (PUBLIC KEY "...");

CREATE TABLE foo (
name TEXT PRIMARY KEY,
payload TEXT ENCRYPTED TO ROLE "bar" BOUND TO name
);

but this is just syntactic sugar, so not that valuable. On the other
hand, just a bit of syntactic sugar can help tick a feature checkbox,
which might be very valuable for marketing reasons even if it's not
valuable for any other reason.

Note that encrypting the payload without a binding to the PK (or similar
name) is very dangerous! So the encryption option would have to support
some way to indicate what other plaintext to bind in (here the "name"
column).

Note also that for key management reasons it would be necessary to be
able to write the payload as ciphertext rather than as to-be-encrypted
TEXT.

Lastly, for a symmetric encryption option one would need a remote oracle
to do the encryption, which seems rather complicated, but in some cases
may well perform faster.

Nico
--

#21Bruce Momjian
bruce@momjian.us
In reply to: Moon, Insung (#1)
#22Bruce Momjian
bruce@momjian.us
In reply to: Joe Conway (#7)
#23Bruce Momjian
bruce@momjian.us
In reply to: Joe Conway (#12)
#24Bruce Momjian
bruce@momjian.us
In reply to: Robert Haas (#13)
#25Bruce Momjian
bruce@momjian.us
In reply to: Joe Conway (#18)
#26Bruce Momjian
bruce@momjian.us
In reply to: Nico Williams (#20)
#27Nico Williams
nico@cryptonector.com
In reply to: Bruce Momjian (#26)
#28Joe Conway
mail@joeconway.com
In reply to: Bruce Momjian (#24)
#29Joe Conway
mail@joeconway.com
In reply to: Bruce Momjian (#23)
#30Nico Williams
nico@cryptonector.com
In reply to: Joe Conway (#28)
#31Joe Conway
mail@joeconway.com
In reply to: Bruce Momjian (#22)
#32Joe Conway
mail@joeconway.com
In reply to: Bruce Momjian (#25)
#33Nico Williams
nico@cryptonector.com
In reply to: Joe Conway (#32)
#34Tsunakawa, Takayuki
tsunakawa.takay@jp.fujitsu.com
In reply to: Bruce Momjian (#21)
#35Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Nico Williams (#27)
#36Nico Williams
nico@cryptonector.com
In reply to: Masahiko Sawada (#35)
#37Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Nico Williams (#36)
#38Bruce Momjian
bruce@momjian.us
In reply to: Nico Williams (#27)
#39Bruce Momjian
bruce@momjian.us
In reply to: Masahiko Sawada (#37)
#40Bruce Momjian
bruce@momjian.us
In reply to: Joe Conway (#32)
#41Bruce Momjian
bruce@momjian.us
In reply to: Nico Williams (#33)
#42Nico Williams
nico@cryptonector.com
In reply to: Bruce Momjian (#38)
#43Nico Williams
nico@cryptonector.com
In reply to: Moon, Insung (#1)
#44Bruce Momjian
bruce@momjian.us
In reply to: Nico Williams (#42)
#45Nico Williams
nico@cryptonector.com
In reply to: Bruce Momjian (#44)
#46Tsunakawa, Takayuki
tsunakawa.takay@jp.fujitsu.com
In reply to: Nico Williams (#45)
#47Nico Williams
nico@cryptonector.com
In reply to: Tsunakawa, Takayuki (#46)
#48Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Tsunakawa, Takayuki (#46)
#49Alvaro Hernandez
aht@ongres.com
In reply to: Nico Williams (#43)
#50Alvaro Hernandez
aht@ongres.com
In reply to: Masahiko Sawada (#4)
#51Nico Williams
nico@cryptonector.com
In reply to: Alvaro Hernandez (#49)
#52Nico Williams
nico@cryptonector.com
In reply to: Masahiko Sawada (#48)
#53Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Nico Williams (#52)
#54Moon, Insung
Moon_Insung_i3@lab.ntt.co.jp
In reply to: Antonin Houska (#2)
#55Moon, Insung
Moon_Insung_i3@lab.ntt.co.jp
In reply to: Aleksander Alekseev (#3)
#56Moon, Insung
Moon_Insung_i3@lab.ntt.co.jp
In reply to: Masahiko Sawada (#4)
#57Moon, Insung
Moon_Insung_i3@lab.ntt.co.jp
In reply to: Tomas Vondra (#6)
#58Nico Williams
nico@cryptonector.com
In reply to: Masahiko Sawada (#53)
#59Moon, Insung
Moon_Insung_i3@lab.ntt.co.jp
In reply to: Tomas Vondra (#5)
#60Moon, Insung
Moon_Insung_i3@lab.ntt.co.jp
In reply to: Tsunakawa, Takayuki (#9)
#61Moon, Insung
Moon_Insung_i3@lab.ntt.co.jp
In reply to: Joe Conway (#12)
#62Moon, Insung
Moon_Insung_i3@lab.ntt.co.jp
In reply to: Tom Lane (#17)
#63Ibrar Ahmed
ibrar.ahmad@gmail.com
In reply to: Moon, Insung (#62)
#64Hans-Jürgen Schönig
postgres@cybertec.at
In reply to: Ibrar Ahmed (#63)
#65Moon, Insung
Moon_Insung_i3@lab.ntt.co.jp
In reply to: Ibrar Ahmed (#63)
#66Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Moon, Insung (#65)
#67Robert Haas
robertmhaas@gmail.com
In reply to: Masahiko Sawada (#66)
#68Haribabu Kommi
kommi.haribabu@gmail.com
In reply to: Robert Haas (#67)
#69Robert Haas
robertmhaas@gmail.com
In reply to: Haribabu Kommi (#68)
#70Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Robert Haas (#67)
#71Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Robert Haas (#69)
#72Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Masahiko Sawada (#71)
#73Chris Howard
chris@elfpen.com
In reply to: Laurenz Albe (#72)
#74Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Laurenz Albe (#72)
#75Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Masahiko Sawada (#70)
#76Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Tomas Vondra (#75)
#77Robert Haas
robertmhaas@gmail.com
In reply to: Masahiko Sawada (#71)
#78Jeremy Schneider
schnjere@amazon.com
In reply to: Masahiko Sawada (#70)
#79Bruce Momjian
bruce@momjian.us
In reply to: Jeremy Schneider (#78)
#80Robert Haas
robertmhaas@gmail.com
In reply to: Bruce Momjian (#79)
#81Jeremy Schneider
schnjere@amazon.com
In reply to: Robert Haas (#80)
#82Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Robert Haas (#77)
#83Antonin Houska
ah@cybertec.at
In reply to: Masahiko Sawada (#82)
#84Antonin Houska
ah@cybertec.at
In reply to: Antonin Houska (#83)
#85Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Antonin Houska (#84)
#86Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Tomas Vondra (#85)
#87Robert Haas
robertmhaas@gmail.com
In reply to: Masahiko Sawada (#86)
#88Robert Haas
robertmhaas@gmail.com
In reply to: Moon, Insung (#1)
#89Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Robert Haas (#88)
#90Robert Haas
robertmhaas@gmail.com
In reply to: Masahiko Sawada (#89)
#91Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Robert Haas (#90)
#92Bruce Momjian
bruce@momjian.us
In reply to: Robert Haas (#90)
#93Bruce Momjian
bruce@momjian.us
In reply to: Masahiko Sawada (#91)
#94Smith, Peter
peters@fast.au.fujitsu.com
In reply to: Masahiko Sawada (#91)
#95Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Smith, Peter (#94)
#96Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Bruce Momjian (#93)
#97Bruce Momjian
bruce@momjian.us
In reply to: Masahiko Sawada (#96)
#98Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Bruce Momjian (#97)
#99Bruce Momjian
bruce@momjian.us
In reply to: Masahiko Sawada (#98)
#100Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Bruce Momjian (#99)
#101Bruce Momjian
bruce@momjian.us
In reply to: Tomas Vondra (#100)
#102Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Bruce Momjian (#101)
#103Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Tomas Vondra (#102)
#104Bruce Momjian
bruce@momjian.us
In reply to: Tomas Vondra (#102)
#105Joe Conway
mail@joeconway.com
In reply to: Bruce Momjian (#99)
#106Bruce Momjian
bruce@momjian.us
In reply to: Joe Conway (#105)
#107Joe Conway
mail@joeconway.com
In reply to: Bruce Momjian (#106)
#108Bruce Momjian
bruce@momjian.us
In reply to: Joe Conway (#107)
#109Bruce Momjian
bruce@momjian.us
In reply to: Joe Conway (#105)
#110Joe Conway
mail@joeconway.com
In reply to: Bruce Momjian (#109)
#111Bruce Momjian
bruce@momjian.us
In reply to: Joe Conway (#110)
#112Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#111)
#113Joe Conway
mail@joeconway.com
In reply to: Bruce Momjian (#111)
#114Joe Conway
mail@joeconway.com
In reply to: Bruce Momjian (#112)
#115Stephen Frost
sfrost@snowman.net
In reply to: Joe Conway (#113)
#116Bruce Momjian
bruce@momjian.us
In reply to: Joe Conway (#113)
#117Stephen Frost
sfrost@snowman.net
In reply to: Bruce Momjian (#116)
#118Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Stephen Frost (#115)
#119Stephen Frost
sfrost@snowman.net
In reply to: Tomas Vondra (#118)
#120Joe Conway
mail@joeconway.com
In reply to: Stephen Frost (#119)
#121Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Tomas Vondra (#118)
#122Joe Conway
mail@joeconway.com
In reply to: Masahiko Sawada (#121)
#123Antonin Houska
ah@cybertec.at
In reply to: Masahiko Sawada (#121)
#124Antonin Houska
ah@cybertec.at
In reply to: Antonin Houska (#123)
#125Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Joe Conway (#122)
#126Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Joe Conway (#120)
#127Stephen Frost
sfrost@snowman.net
In reply to: Tomas Vondra (#126)
#128Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Stephen Frost (#127)
#129shawn wang
shawn.wang.pg@gmail.com
In reply to: Masahiko Sawada (#121)
#130Masahiko Sawada
sawada.mshk@gmail.com
In reply to: shawn wang (#129)
#131Joe Conway
mail@joeconway.com
In reply to: Masahiko Sawada (#130)
#132Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Joe Conway (#131)
#133Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Tomas Vondra (#125)
#134Bruce Momjian
bruce@momjian.us
In reply to: Stephen Frost (#117)
#135Bruce Momjian
bruce@momjian.us
In reply to: Joe Conway (#110)
#136Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Bruce Momjian (#134)
#137Stephen Frost
sfrost@snowman.net
In reply to: Alvaro Herrera (#136)
#138Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Stephen Frost (#137)
#139Bruce Momjian
bruce@momjian.us
In reply to: Alvaro Herrera (#136)
#140Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Bruce Momjian (#134)
#141Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Bruce Momjian (#139)
#142Bruce Momjian
bruce@momjian.us
In reply to: Alvaro Herrera (#141)
#143Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#142)
#144Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#142)
#145Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#139)
#146Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Bruce Momjian (#144)
#147Bruce Momjian
bruce@momjian.us
In reply to: Tomas Vondra (#140)
#148Peter Eisentraut
peter_e@gmx.net
In reply to: Tomas Vondra (#140)
#149Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Bruce Momjian (#147)
#150Bruce Momjian
bruce@momjian.us
In reply to: Masahiko Sawada (#149)
#151Joe Conway
mail@joeconway.com
In reply to: Bruce Momjian (#150)
#152Bruce Momjian
bruce@momjian.us
In reply to: Joe Conway (#151)
#153Stephen Frost
sfrost@snowman.net
In reply to: Bruce Momjian (#152)
#154Peter Eisentraut
peter_e@gmx.net
In reply to: Stephen Frost (#153)
#155Joe Conway
mail@joeconway.com
In reply to: Peter Eisentraut (#154)
#156Bruce Momjian
bruce@momjian.us
In reply to: Stephen Frost (#153)
#157Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Bruce Momjian (#152)
#158Stephen Frost
sfrost@snowman.net
In reply to: Bruce Momjian (#156)
#159Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Stephen Frost (#158)
#160Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Bruce Momjian (#156)
#161Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Joe Conway (#155)
#162Bruce Momjian
bruce@momjian.us
In reply to: Joe Conway (#155)
#163Bruce Momjian
bruce@momjian.us
In reply to: Stephen Frost (#158)
#164Stephen Frost
sfrost@snowman.net
In reply to: Bruce Momjian (#163)
#165Bruce Momjian
bruce@momjian.us
In reply to: Tomas Vondra (#159)
#166Bruce Momjian
bruce@momjian.us
In reply to: Stephen Frost (#164)
#167Stephen Frost
sfrost@snowman.net
In reply to: Bruce Momjian (#166)
#168Bruce Momjian
bruce@momjian.us
In reply to: Stephen Frost (#167)
#169Joe Conway
mail@joeconway.com
In reply to: Stephen Frost (#167)
#170Stephen Frost
sfrost@snowman.net
In reply to: Bruce Momjian (#168)
#171Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#168)
#172Bruce Momjian
bruce@momjian.us
In reply to: Stephen Frost (#170)
#173Stephen Frost
sfrost@snowman.net
In reply to: Bruce Momjian (#172)
#174Bruce Momjian
bruce@momjian.us
In reply to: Stephen Frost (#173)
#175Ryan Lambert
ryan@rustprooflabs.com
In reply to: Bruce Momjian (#174)
#176Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Tomas Vondra (#157)
#177Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Joe Conway (#169)
#178Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Bruce Momjian (#171)
#179Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Bruce Momjian (#165)
#180Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Bruce Momjian (#150)
#181Peter Eisentraut
peter_e@gmx.net
In reply to: Joe Conway (#155)
#182Joe Conway
mail@joeconway.com
In reply to: Tomas Vondra (#178)
#183Joe Conway
mail@joeconway.com
In reply to: Tomas Vondra (#177)
#184Joe Conway
mail@joeconway.com
In reply to: Peter Eisentraut (#181)
#185Ryan Lambert
ryan@rustprooflabs.com
In reply to: Tomas Vondra (#177)
#186Joe Conway
mail@joeconway.com
In reply to: Ryan Lambert (#185)
#187Bruce Momjian
bruce@momjian.us
In reply to: Joe Conway (#184)
#188Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#171)
#189Bruce Momjian
bruce@momjian.us
In reply to: Ryan Lambert (#175)
#190Bruce Momjian
bruce@momjian.us
In reply to: Tomas Vondra (#178)
#191Stephen Frost
sfrost@snowman.net
In reply to: Bruce Momjian (#187)
#192Bruce Momjian
bruce@momjian.us
In reply to: Stephen Frost (#191)
#193Bruce Momjian
bruce@momjian.us
In reply to: Joe Conway (#186)
#194Stephen Frost
sfrost@snowman.net
In reply to: Bruce Momjian (#192)
#195Joe Conway
mail@joeconway.com
In reply to: Bruce Momjian (#193)
#196Bruce Momjian
bruce@momjian.us
In reply to: Joe Conway (#195)
#197Joe Conway
mail@joeconway.com
In reply to: Bruce Momjian (#196)
#198Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Bruce Momjian (#196)
#199Joe Conway
mail@joeconway.com
In reply to: Tomas Vondra (#198)
#200Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Joe Conway (#199)
#201Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Alvaro Herrera (#200)
#202Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Tomas Vondra (#201)
#203Stephen Frost
sfrost@snowman.net
In reply to: Tomas Vondra (#201)
#204Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Bruce Momjian (#196)
#205Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Alvaro Herrera (#202)
#206Joe Conway
mail@joeconway.com
In reply to: Tomas Vondra (#204)
#207Stephen Frost
sfrost@snowman.net
In reply to: Joe Conway (#206)
#208Ryan Lambert
ryan@rustprooflabs.com
In reply to: Stephen Frost (#207)
#209Stephen Frost
sfrost@snowman.net
In reply to: Ryan Lambert (#208)
#210Ryan Lambert
ryan@rustprooflabs.com
In reply to: Stephen Frost (#209)
#211Stephen Frost
sfrost@snowman.net
In reply to: Ryan Lambert (#210)
#212Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Joe Conway (#184)
#213Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Joe Conway (#186)
#214Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Stephen Frost (#209)
#215Antonin Houska
ah@cybertec.at
In reply to: Joe Conway (#169)
#216Antonin Houska
ah@cybertec.at
In reply to: Tomas Vondra (#204)
#217Joe Conway
mail@joeconway.com
In reply to: Stephen Frost (#207)
#218Joe Conway
mail@joeconway.com
In reply to: Stephen Frost (#209)
#219Joe Conway
mail@joeconway.com
In reply to: Masahiko Sawada (#213)
#220Joe Conway
mail@joeconway.com
In reply to: Masahiko Sawada (#212)
#221Joe Conway
mail@joeconway.com
In reply to: Antonin Houska (#216)
#222Joe Conway
mail@joeconway.com
In reply to: Antonin Houska (#215)
#223Stephen Frost
sfrost@snowman.net
In reply to: Joe Conway (#217)
#224Joe Conway
mail@joeconway.com
In reply to: Masahiko Sawada (#214)
#225Joe Conway
mail@joeconway.com
In reply to: Stephen Frost (#223)
#226Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Stephen Frost (#209)
#227Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Masahiko Sawada (#212)
#228Bruce Momjian
bruce@momjian.us
In reply to: Joe Conway (#222)
#229Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Bruce Momjian (#228)
#230Bruce Momjian
bruce@momjian.us
In reply to: Alvaro Herrera (#229)
#231Ryan Lambert
ryan@rustprooflabs.com
In reply to: Alvaro Herrera (#229)
#232Stephen Frost
sfrost@snowman.net
In reply to: Ryan Lambert (#231)
#233Bruce Momjian
bruce@momjian.us
In reply to: Ryan Lambert (#231)
#234Stephen Frost
sfrost@snowman.net
In reply to: Bruce Momjian (#233)
#235Bruce Momjian
bruce@momjian.us
In reply to: Stephen Frost (#234)
#236Ryan Lambert
ryan@rustprooflabs.com
In reply to: Bruce Momjian (#235)
#237Stephen Frost
sfrost@snowman.net
In reply to: Ryan Lambert (#236)
#238Bruce Momjian
bruce@momjian.us
In reply to: Stephen Frost (#237)
#239Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Bruce Momjian (#238)
#240Stephen Frost
sfrost@snowman.net
In reply to: Alvaro Herrera (#239)
#241Bruce Momjian
bruce@momjian.us
In reply to: Alvaro Herrera (#239)
#242Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Bruce Momjian (#241)
#243Joe Conway
mail@joeconway.com
In reply to: Alvaro Herrera (#239)
#244Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Alvaro Herrera (#242)
#245Stephen Frost
sfrost@snowman.net
In reply to: Tomas Vondra (#244)
#246Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Stephen Frost (#245)
#247Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Joe Conway (#243)
#248Ryan Lambert
ryan@rustprooflabs.com
In reply to: Alvaro Herrera (#247)
#249Bruce Momjian
bruce@momjian.us
In reply to: Alvaro Herrera (#247)
#250Bruce Momjian
bruce@momjian.us
In reply to: Tomas Vondra (#246)
#251Ryan Lambert
ryan@rustprooflabs.com
In reply to: Bruce Momjian (#250)
#252Antonin Houska
ah@cybertec.at
In reply to: Joe Conway (#222)
#253Bruce Momjian
bruce@momjian.us
In reply to: Ryan Lambert (#251)
#254Robert Haas
robertmhaas@gmail.com
In reply to: Bruce Momjian (#188)
#255Bruce Momjian
bruce@momjian.us
In reply to: Robert Haas (#254)
#256Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#228)
#257Joe Conway
mail@joeconway.com
In reply to: Bruce Momjian (#256)
#258Bruce Momjian
bruce@momjian.us
In reply to: Joe Conway (#257)
#259Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#256)
#260Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Bruce Momjian (#256)
#261Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Bruce Momjian (#258)
#262Sehrope Sarkuni
sehrope@jackdb.com
In reply to: Bruce Momjian (#258)
#263Bruce Momjian
bruce@momjian.us
In reply to: Masahiko Sawada (#261)
#264Bruce Momjian
bruce@momjian.us
In reply to: Sehrope Sarkuni (#262)
#265Bruce Momjian
bruce@momjian.us
In reply to: Masahiko Sawada (#260)
#266Ryan Lambert
ryan@rustprooflabs.com
In reply to: Bruce Momjian (#265)
#267Bruce Momjian
bruce@momjian.us
In reply to: Ryan Lambert (#266)
#268Joe Conway
mail@joeconway.com
In reply to: Bruce Momjian (#267)
#269Joe Conway
mail@joeconway.com
In reply to: Bruce Momjian (#258)
#270Joe Conway
mail@joeconway.com
In reply to: Joe Conway (#269)
#271Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Joe Conway (#270)
#272Joe Conway
mail@joeconway.com
In reply to: Joe Conway (#270)
#273Joe Conway
mail@joeconway.com
In reply to: Tomas Vondra (#271)
#274Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Joe Conway (#273)
#275Antonin Houska
ah@cybertec.at
In reply to: Tomas Vondra (#271)
#276Antonin Houska
ah@cybertec.at
In reply to: Masahiko Sawada (#133)
#277Bruce Momjian
bruce@momjian.us
In reply to: Joe Conway (#269)
#278Bruce Momjian
bruce@momjian.us
In reply to: Joe Conway (#270)
#279Bruce Momjian
bruce@momjian.us
In reply to: Tomas Vondra (#271)
#280Bruce Momjian
bruce@momjian.us
In reply to: Joe Conway (#273)
#281Bruce Momjian
bruce@momjian.us
In reply to: Tomas Vondra (#274)
#282Bruce Momjian
bruce@momjian.us
In reply to: Joe Conway (#268)
#283Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Bruce Momjian (#281)
#284Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Bruce Momjian (#279)
#285Bruce Momjian
bruce@momjian.us
In reply to: Tomas Vondra (#283)
#286Sehrope Sarkuni
sehrope@jackdb.com
In reply to: Tomas Vondra (#284)
#287Bruce Momjian
bruce@momjian.us
In reply to: Tomas Vondra (#284)
#288Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Bruce Momjian (#277)
#289Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Bruce Momjian (#287)
#290Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Bruce Momjian (#285)
#291Bruce Momjian
bruce@momjian.us
In reply to: Tomas Vondra (#290)
#292Bruce Momjian
bruce@momjian.us
In reply to: Sehrope Sarkuni (#286)
#293Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Bruce Momjian (#265)
#294Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Antonin Houska (#276)
#295Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Bruce Momjian (#256)
#296Antonin Houska
ah@cybertec.at
In reply to: Tomas Vondra (#284)
#297Antonin Houska
ah@cybertec.at
In reply to: Tomas Vondra (#289)
#298Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Antonin Houska (#296)
#299Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Antonin Houska (#297)
#300Antonin Houska
ah@cybertec.at
In reply to: Tomas Vondra (#298)
#301Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Antonin Houska (#300)
#302Sehrope Sarkuni
sehrope@jackdb.com
In reply to: Tomas Vondra (#301)
#303Bruce Momjian
bruce@momjian.us
In reply to: Alvaro Herrera (#288)
#304Bruce Momjian
bruce@momjian.us
In reply to: Sehrope Sarkuni (#302)
#305Bruce Momjian
bruce@momjian.us
In reply to: Masahiko Sawada (#293)
#306Bruce Momjian
bruce@momjian.us
In reply to: Masahiko Sawada (#295)
#307Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#306)
#308Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Bruce Momjian (#306)
#309Bruce Momjian
bruce@momjian.us
In reply to: Joe Conway (#273)
#310Bruce Momjian
bruce@momjian.us
In reply to: Masahiko Sawada (#308)
#311Bruce Momjian
bruce@momjian.us
In reply to: Tomas Vondra (#301)
#312Bruce Momjian
bruce@momjian.us
In reply to: Tomas Vondra (#298)
#313Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#309)
#314Stephen Frost
sfrost@snowman.net
In reply to: Bruce Momjian (#313)
#315Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Bruce Momjian (#279)
#316Bruce Momjian
bruce@momjian.us
In reply to: Stephen Frost (#314)
#317Stephen Frost
sfrost@snowman.net
In reply to: Bruce Momjian (#316)
#318Bruce Momjian
bruce@momjian.us
In reply to: Alvaro Herrera (#315)
#319Bruce Momjian
bruce@momjian.us
In reply to: Stephen Frost (#317)
#320Bruce Momjian
bruce@momjian.us
In reply to: Sehrope Sarkuni (#286)
#321Stephen Frost
sfrost@snowman.net
In reply to: Bruce Momjian (#319)
#322Bruce Momjian
bruce@momjian.us
In reply to: Stephen Frost (#321)
#323Stephen Frost
sfrost@snowman.net
In reply to: Bruce Momjian (#322)
#324Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#309)
#325Bruce Momjian
bruce@momjian.us
In reply to: Stephen Frost (#323)
#326Stephen Frost
sfrost@snowman.net
In reply to: Bruce Momjian (#325)
#327Bruce Momjian
bruce@momjian.us
In reply to: Stephen Frost (#326)
#328Sehrope Sarkuni
sehrope@jackdb.com
In reply to: Bruce Momjian (#324)
#329Bruce Momjian
bruce@momjian.us
In reply to: Sehrope Sarkuni (#328)
#330Sehrope Sarkuni
sehrope@jackdb.com
In reply to: Bruce Momjian (#329)
#331Bruce Momjian
bruce@momjian.us
In reply to: Sehrope Sarkuni (#330)
#332Jonathan S. Katz
jkatz@postgresql.org
In reply to: Masahiko Sawada (#308)
#333Jonathan S. Katz
jkatz@postgresql.org
In reply to: Jonathan S. Katz (#332)
#334Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Bruce Momjian (#318)
#335Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Alvaro Herrera (#334)
#336Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Jonathan S. Katz (#332)
#337Bruce Momjian
bruce@momjian.us
In reply to: Alvaro Herrera (#334)
#338Bruce Momjian
bruce@momjian.us
In reply to: Alvaro Herrera (#335)
#339Sehrope Sarkuni
sehrope@jackdb.com
In reply to: Bruce Momjian (#337)
#340Joe Conway
mail@joeconway.com
In reply to: Sehrope Sarkuni (#339)
#341Bruce Momjian
bruce@momjian.us
In reply to: Sehrope Sarkuni (#339)
#342Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#305)
#343Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Masahiko Sawada (#336)
#344Sehrope Sarkuni
sehrope@jackdb.com
In reply to: Masahiko Sawada (#343)
#345Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sehrope Sarkuni (#344)
#346Sehrope Sarkuni
sehrope@jackdb.com
In reply to: Masahiko Sawada (#345)
#347Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Bruce Momjian (#342)
#348Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Masahiko Sawada (#347)
#349Bruce Momjian
bruce@momjian.us
In reply to: Masahiko Sawada (#347)
#350Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#342)
#351Sehrope Sarkuni
sehrope@jackdb.com
In reply to: Bruce Momjian (#349)
#352Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Bruce Momjian (#338)
#353Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Sehrope Sarkuni (#339)
#354Sehrope Sarkuni
sehrope@jackdb.com
In reply to: Alvaro Herrera (#352)
#355Sehrope Sarkuni
sehrope@jackdb.com
In reply to: Alvaro Herrera (#353)
#356Joe Conway
mail@joeconway.com
In reply to: Sehrope Sarkuni (#355)
#357Bruce Momjian
bruce@momjian.us
In reply to: Alvaro Herrera (#352)
#358Bruce Momjian
bruce@momjian.us
In reply to: Sehrope Sarkuni (#354)
#359Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#342)
#360Sehrope Sarkuni
sehrope@jackdb.com
In reply to: Bruce Momjian (#359)
#361Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sehrope Sarkuni (#346)
#362Bruce Momjian
bruce@momjian.us
In reply to: Sehrope Sarkuni (#360)
#363Sehrope Sarkuni
sehrope@jackdb.com
In reply to: Masahiko Sawada (#361)
#364Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sehrope Sarkuni (#351)
#365Sehrope Sarkuni
sehrope@jackdb.com
In reply to: Bruce Momjian (#362)
#366Sehrope Sarkuni
sehrope@jackdb.com
In reply to: Masahiko Sawada (#364)
#367Bruce Momjian
bruce@momjian.us
In reply to: Sehrope Sarkuni (#365)
#368Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Bruce Momjian (#349)
#369Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Bruce Momjian (#367)
#370Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sehrope Sarkuni (#363)
#371Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Masahiko Sawada (#368)
#372Sehrope Sarkuni
sehrope@jackdb.com
In reply to: Bruce Momjian (#367)
#373Sehrope Sarkuni
sehrope@jackdb.com
In reply to: Masahiko Sawada (#368)
#374Bruce Momjian
bruce@momjian.us
In reply to: Masahiko Sawada (#368)
#375Bruce Momjian
bruce@momjian.us
In reply to: Masahiko Sawada (#371)
#376Bruce Momjian
bruce@momjian.us
In reply to: Sehrope Sarkuni (#373)
#377Bruce Momjian
bruce@momjian.us
In reply to: Masahiko Sawada (#369)
#378Bruce Momjian
bruce@momjian.us
In reply to: Sehrope Sarkuni (#372)
#379Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Bruce Momjian (#375)
#380Bruce Momjian
bruce@momjian.us
In reply to: Masahiko Sawada (#379)
#381Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Bruce Momjian (#380)
#382Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Masahiko Sawada (#381)
#383Bruce Momjian
bruce@momjian.us
In reply to: Masahiko Sawada (#381)
#384Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#383)
#385Jonathan S. Katz
jkatz@postgresql.org
In reply to: Bruce Momjian (#384)
#386Bruce Momjian
bruce@momjian.us
In reply to: Jonathan S. Katz (#385)
#387Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Bruce Momjian (#383)
#388Bruce Momjian
bruce@momjian.us
In reply to: Masahiko Sawada (#387)
#389Sehrope Sarkuni
sehrope@jackdb.com
In reply to: Bruce Momjian (#378)
#390Sehrope Sarkuni
sehrope@jackdb.com
In reply to: Bruce Momjian (#388)
#391Bruce Momjian
bruce@momjian.us
In reply to: Sehrope Sarkuni (#390)
#392Sehrope Sarkuni
sehrope@jackdb.com
In reply to: Bruce Momjian (#391)
#393Bruce Momjian
bruce@momjian.us
In reply to: Sehrope Sarkuni (#392)
#394Bruce Momjian
bruce@momjian.us
In reply to: Sehrope Sarkuni (#392)
#395Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#192)
#396Stephen Frost
sfrost@snowman.net
In reply to: Bruce Momjian (#395)
#397Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Stephen Frost (#396)
#398Stephen Frost
sfrost@snowman.net
In reply to: Tomas Vondra (#397)
#399Bruce Momjian
bruce@momjian.us
In reply to: Stephen Frost (#396)
#400Bruce Momjian
bruce@momjian.us
In reply to: Stephen Frost (#398)
#401Sehrope Sarkuni
sehrope@jackdb.com
In reply to: Bruce Momjian (#393)
#402Sehrope Sarkuni
sehrope@jackdb.com
In reply to: Stephen Frost (#398)
#403Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Bruce Momjian (#400)
#404Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Stephen Frost (#398)
#405Tomas Vondra
tomas.vondra@2ndquadrant.com
In reply to: Masahiko Sawada (#403)
#406Bruce Momjian
bruce@momjian.us
In reply to: Masahiko Sawada (#403)
#407Bruce Momjian
bruce@momjian.us
In reply to: Sehrope Sarkuni (#402)
#408Bruce Momjian
bruce@momjian.us
In reply to: Tomas Vondra (#404)
#409Bruce Momjian
bruce@momjian.us
In reply to: Sehrope Sarkuni (#401)
#410Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#409)
#411Bruce Momjian
bruce@momjian.us
In reply to: Sehrope Sarkuni (#389)
#412Antonin Houska
ah@cybertec.at
In reply to: Masahiko Sawada (#133)
#413Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#250)
#414Bruce Momjian
bruce@momjian.us
In reply to: Alvaro Herrera (#335)
#415Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#367)
#416Bruce Momjian
bruce@momjian.us
In reply to: Sehrope Sarkuni (#373)
#417Bruce Momjian
bruce@momjian.us
In reply to: Sehrope Sarkuni (#389)
#418Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#410)
#419Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Tomas Vondra (#405)
#420Smith, Peter
peters@fast.au.fujitsu.com
In reply to: Tomas Vondra (#405)
#421Antonin Houska
ah@cybertec.at
In reply to: Bruce Momjian (#418)
#422Bruce Momjian
bruce@momjian.us
In reply to: Antonin Houska (#421)
#423Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Bruce Momjian (#422)
#424Antonin Houska
ah@cybertec.at
In reply to: Bruce Momjian (#422)
#425Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#422)
#426Bruce Momjian
bruce@momjian.us
In reply to: Masahiko Sawada (#423)
#427Bruce Momjian
bruce@momjian.us
In reply to: Antonin Houska (#424)
#428Stephen Frost
sfrost@snowman.net
In reply to: Bruce Momjian (#427)
#429Stephen Frost
sfrost@snowman.net
In reply to: Bruce Momjian (#426)
#430Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Stephen Frost (#429)
#431Ibrar Ahmed
ibrar.ahmad@gmail.com
In reply to: Bruce Momjian (#427)
#432Bruce Momjian
bruce@momjian.us
In reply to: Stephen Frost (#429)
#433Bruce Momjian
bruce@momjian.us
In reply to: Ibrar Ahmed (#431)
#434Antonin Houska
ah@cybertec.at
In reply to: Bruce Momjian (#432)
#435Bruce Momjian
bruce@momjian.us
In reply to: Antonin Houska (#434)
#436Antonin Houska
ah@cybertec.at
In reply to: Bruce Momjian (#432)
#437Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#435)
#438Bruce Momjian
bruce@momjian.us
In reply to: Antonin Houska (#436)
#439Ibrar Ahmed
ibrar.ahmad@gmail.com
In reply to: Bruce Momjian (#435)
#440Stephen Frost
sfrost@snowman.net
In reply to: Ibrar Ahmed (#439)
#441Stephen Frost
sfrost@snowman.net
In reply to: Bruce Momjian (#438)
#442Stephen Frost
sfrost@snowman.net
In reply to: Bruce Momjian (#432)
#443Sehrope Sarkuni
sehrope@jackdb.com
In reply to: Ibrar Ahmed (#439)
#444Ahsan Hadi
ahsan.hadi@gmail.com
In reply to: Sehrope Sarkuni (#443)
#445Stephen Frost
sfrost@snowman.net
In reply to: Ahsan Hadi (#444)
#446Peter Eisentraut
peter_e@gmx.net
In reply to: Antonin Houska (#436)
#447Smith, Peter
peters@fast.au.fujitsu.com
In reply to: Ibrar Ahmed (#439)
#448Smith, Peter
peters@fast.au.fujitsu.com
In reply to: Stephen Frost (#429)
#449Ahsan Hadi
ahsan.hadi@gmail.com
In reply to: Smith, Peter (#447)
#450Ahsan Hadi
ahsan.hadi@gmail.com
In reply to: Ahsan Hadi (#449)
#451Joe Conway
mail@joeconway.com
In reply to: Ahsan Hadi (#450)
#452Bruce Momjian
bruce@momjian.us
In reply to: Stephen Frost (#442)
#453Stephen Frost
sfrost@snowman.net
In reply to: Bruce Momjian (#452)
#454Bruce Momjian
bruce@momjian.us
In reply to: Stephen Frost (#453)
#455Stephen Frost
sfrost@snowman.net
In reply to: Bruce Momjian (#454)
#456Bruce Momjian
bruce@momjian.us
In reply to: Stephen Frost (#455)
#457Stephen Frost
sfrost@snowman.net
In reply to: Bruce Momjian (#456)
#458Bruce Momjian
bruce@momjian.us
In reply to: Stephen Frost (#457)
#459Moon, Insung
tsukiwamoon.pgsql@gmail.com
In reply to: Bruce Momjian (#456)
#460Moon, Insung
tsukiwamoon.pgsql@gmail.com
In reply to: Stephen Frost (#455)
#461Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Stephen Frost (#455)
#462Joe Conway
mail@joeconway.com
In reply to: Masahiko Sawada (#461)
#463Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Joe Conway (#462)
#464Smith, Peter
peters@fast.au.fujitsu.com
In reply to: Joe Conway (#462)
#465Smith, Peter
peters@fast.au.fujitsu.com
In reply to: Masahiko Sawada (#423)
#466Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Smith, Peter (#465)
#467Moon, Insung
tsukiwamoon.pgsql@gmail.com
In reply to: Masahiko Sawada (#466)
#468Robert Haas
robertmhaas@gmail.com
In reply to: Bruce Momjian (#376)
#469Robert Haas
robertmhaas@gmail.com
In reply to: Bruce Momjian (#380)
#470Antonin Houska
ah@cybertec.at
In reply to: Robert Haas (#468)
#471Antonin Houska
ah@cybertec.at
In reply to: Robert Haas (#469)
#472Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Antonin Houska (#471)
#473Bruce Momjian
bruce@momjian.us
In reply to: Antonin Houska (#471)
#474shawn wang
shawn.wang.pg@gmail.com
In reply to: Masahiko Sawada (#466)
#475Robert Haas
robertmhaas@gmail.com
In reply to: Antonin Houska (#470)
#476Antonin Houska
ah@cybertec.at
In reply to: Robert Haas (#475)
#477Michael Paquier
michael@paquier.xyz
In reply to: Moon, Insung (#467)
#478Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Michael Paquier (#477)
#479Ibrar Ahmed
ibrar.ahmad@gmail.com
In reply to: Masahiko Sawada (#478)
#480cary huang
hcary328@gmail.com
In reply to: Ibrar Ahmed (#479)
#481Masahiko Sawada
sawada.mshk@gmail.com
In reply to: cary huang (#480)
#482cary huang
hcary328@gmail.com
In reply to: Masahiko Sawada (#481)
#483Sehrope Sarkuni
sehrope@jackdb.com
In reply to: cary huang (#482)
#484Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sehrope Sarkuni (#483)
#485Sehrope Sarkuni
sehrope@jackdb.com
In reply to: Masahiko Sawada (#484)
#486Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sehrope Sarkuni (#485)
#487Sehrope Sarkuni
sehrope@jackdb.com
In reply to: Masahiko Sawada (#486)